2017-07-07 63 views
1

我有以下代碼:NSubstitue模擬的IEnumerable其中()方法

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<>參數,如任何(),不失敗的方法。

我的問題是:

  • 如果可以如何避免這種錯誤呢?
  • 如果不是,如何模擬Enumerable擴展方法?

回答

3

NSubstitute不能模擬擴展方法,如Enumerable.Where<T>。對於List的情況,我建議不要嘲笑它。使用真實的列表並添加測試所需的項目,以便真正的Where(..)擴展方法將過濾項目並提供所需的項目。