MOQ - 设置方法中的 LINQ 谓词
在我的方法中,我让我的存储库执行此操作:
bool isConditionMet = MyRepository.Any(x => x.Condition == true);
我尝试使用最小起订量来模拟它,如下所示:
MyMockedRepository.Setup(x => x.Any(y => y.Condition == true)).Returns(true);
但是,当代码执行时,存储库调用始终返回 false。
有没有办法使用最小起订量来做到这一点?
** 编辑 - 根据请求添加代码 **
我正在使用 NHibernate,因此我的 Any 方法位于我的基础存储库中并按如下方式实现:
public virtual bool Any(Expression<Func<T, bool>> predicate)
{
return Session.Query<T>().Cacheable().Any(predicate);
}
In my method, I have my repository doing this:
bool isConditionMet = MyRepository.Any(x => x.Condition == true);
I am attempting to mock this using MOQ like so:
MyMockedRepository.Setup(x => x.Any(y => y.Condition == true)).Returns(true);
However, when the code executes, the repository call always returns false.
Is there a way to do this using MOQ?
** EDIT - Adding code per request **
I am using NHibernate so my Any method is in my base repository and implemented as such:
public virtual bool Any(Expression<Func<T, bool>> predicate)
{
return Session.Query<T>().Cacheable().Any(predicate);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要使用
It.Is
、It.IsAny
或It.IsRegex
来匹配调用参数。例如,要为任何谓词返回
true
,您可以使用:或者,您可以匹配所有表达式,但传递一个将返回的委托取决于表达式本身的值:
You need to match invocation arguments using
It.Is
,It.IsAny
orIt.IsRegex
.For example, to return
true
for any predicate, you could use:Or, you can match all expressions, but pass a delegate which will return a value depending on the expression itself: