MOQ – LINQ在设置方法中的谓词

在我的方法中,我有我的存储库这样做:

bool isConditionMet = MyRepository.Any(x => x.Condition == true); 

我试图使用MOQ来模拟这样:

 MyMockedRepository.Setup(x => x.Any(y => y.Condition == true)).Returns(true); 

但是,当代码执行时,存储库调用始终返回false。

有没有办法用MOQ做到这一点?

**编辑 – 每个请求添加代码**

我正在使用NHibernate所以我的Any方法在我的基础存储库中,并实现如下:

 public virtual bool Any(Expression<Func> predicate) { return Session.Query().Cacheable().Any(predicate); } 

您需要使用It.IsIt.IsAnyIt.IsRegex匹配调用参数。

例如,要为任何谓词返回true ,您可以使用:

 MyMockedRepository .Setup(x => x.Any(It.IsAny>>())) .Returns(true); 

或者,您可以匹配所有表达式,但传递一个委托,该委托将根据表达式本身返回一个值:

 Func, bool> resultFunc = { ... } MyMockedRepository .Setup(x => x.Any(It.IsAny>>())) .Returns(resultFunc);