如何在单元测试方法中模拟返回IEnumerable <t>的方法?

时间:2018-12-16 14:08:47

标签: c# unit-testing .net-core moq

我必须模拟一个返回IEnumerable的方法,如下所示。

public IEnumerable<Program> GetAllPrograms(string marketCode) {
            return context.Set<Program>()
                .Where(p => p.Market.Equals(marketCode)
                            && p.IsEnabled == true);
        }

我尝试了以下方法,但是此调用未返回任何结果。

  programRepositoryMock.Setup(m => m.GetAllPrograms("ATV"))
        .Returns(It.IsAny<IEnumerable<QuoteSettings.Program>>());

请让我知道如何模拟此实例?

注意:我想返回此模拟的数据。

谢谢

1 个答案:

答案 0 :(得分:1)

Returns()的参数是您希望模拟返回的值。不要在其中使用模拟库中的任何构造,而只需返回所需的内容即可:

List<Program> result = new List<Program>();
// Add entries to result list here...
programRepositoryMock.Setup(m => m.GetAllPrograms("ATV"))
    .Returns(result);

当调用GetAllPrograms("ATV")方法时,它将返回列表中的所有内容。如果要过滤It.IsAny<>的参数,则需要GetAllPrograms()构造。以下内容将与任何电台名称匹配:

programRepositoryMock.Setup(m => m.GetAllPrograms(It.IsAny<string>()))
    .Returns(result);