【问题标题】:How to mock a method returning IEnumerable<T> in unit test method?如何在单元测试方法中模拟返回 IEnumerable<T> 的方法?
【发布时间】:2018-12-16 14:08:47
【问题描述】:

我必须模拟一个返回 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>>());

请告诉我如何模拟这个实例?

注意:我想为这个模拟返回数据。

谢谢

【问题讨论】:

  • It.IsAny&lt;T&gt; 是一个帮助方法,用于设置模拟。只需将您想要从该方法返回的任何内容传递给Returns。如果你只想要一个空的枚举,试试Enumerable.Empty&lt;T&gt;
  • @thisextendsthat,我无法创建 IEnumerable 类型的变量,即在我的情况下 IEnumerable 并返回它。能详细点吗?
  • 只返回一个List&lt;T&gt;,这也是一个可枚举的......

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


【解决方案1】:

Returns() 的参数是您希望模拟返回的值。不要使用那里的模拟库中的任何构造,而只需返回你想要的:

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

这将在调用GetAllPrograms("ATV") 方法时返回列表中的任何内容。如果要过滤 GetAllPrograms() 的参数,则需要 It.IsAny&lt;&gt; 构造。以下将匹配任何电台名称:

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

【讨论】:

    猜你喜欢
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 2014-04-16
    相关资源
    最近更新 更多