在我的方法中,我让我的存储库执行此操作:
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<T, bool>> predicate)
{
return Session.Query<T>().Cacheable().Any(predicate);
}
最佳答案
您需要使用 It.Is
、It.IsAny
或 It.IsRegex
来匹配调用参数。
例如,要为任何 谓词返回true
,您可以使用:
MyMockedRepository
.Setup(x => x.Any(It.IsAny<Expression<Func<T, bool>>>()))
.Returns(true);
或者,您可以匹配所有表达式,但传递一个委托(delegate),该委托(delegate)将根据表达式本身返回一个值:
Func<Expression<Func<T, bool>, bool> resultFunc = { ... }
MyMockedRepository
.Setup(x => x.Any(It.IsAny<Expression<Func<T, bool>>>()))
.Returns(resultFunc);
关于c# - 最小起订量 - 安装方法中的 LINQ 谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6835366/