NSubstitue mock IEnumerable Where()方法

时间:2017-07-07 16:15:49

标签: linq unit-testing mocking nsubstitute

我有以下代码:

45 var listMock = Substitute.For<List<EntityTestObject>>(); 46 listMock.Where(Arg.Any<Func<EntityTestObject, bool>>()).Returns(Something);

但我收到以下错误:

System.ArgumentNullException:值不能为空。 参数名称:谓词    在System.Linq.Enumerable.Where[TSource](IEnumerable'1 source, Func'2 predicate)    在第46行。

但是,不带func<>个参数的方法(例如Any())不会失败。

我的问题是:

  • 如果可能的话,如何避免这个错误?
  • 如果没有,如何模拟Enumerable Extension方法?

1 个答案:

答案 0 :(得分:3)

NSubstitute不能模拟像Enumerable.Where<T>这样的扩展方法。对于List的情况,我建议不要嘲笑它。使用真实列表并添加测试所需的项目,以便真正的Where(..)扩展方法将过滤项目并提供所需的项目。