c# - 最小起订量 - 安装方法中的 LINQ 谓词

标签 c# .net unit-testing moq predicate

在我的方法中,我让我的存储库执行此操作:

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.IsIt.IsAnyIt.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/

相关文章:

c# - Try-catch 加速我的代码?

unit-testing - 在没有启动嵌入式 tomcat 的情况下运行 grails 功能测试

android - 从 Robotium 测试用例中的错误线程异常调用

c# - TDD 中的命名测试与单元测试命名

c# - 新 Async/Await 命令中的中间结果

c# - 为什么我的接口(interface)的 BaseType 为空?

c# - 使用相同的属性名称和类型多次分配匿名类型

c# - 如何防止在文本框上按 Enter 键时重定向到另一个 aspx 页面?

javascript - 类型 System.Collections.Generic.IDictionary 不支持反序列化数组

wcf - NET Remoting 和 MarshalByRefObject 真的死了吗?