【问题标题】:Using Moq with Generics and Linq Expressions将 Moq 与泛型和 Linq 表达式一起使用
【发布时间】:2011-06-09 19:10:13
【问题描述】:

我有以下通用方法:

public bool Any<TEntity>(Expression<Func<TEntity, bool>> whereCondition) where TEntity : class
{
    bool result = false;
    ObjectQuery<TEntity> query = CreateObjectSet<TEntity>();

    var queryResult = query.Where(whereCondition);

    if(queryResult.Count() > 0)
        result = true;

    return result;
}

使用 Moq,我模拟了该方法所在类的一个实例。
现在我想模拟一下这个方法的返回结果:

var mock = new Mock<ITestRepository>();
mock.Setup(foo => foo.Single<MyObject>(It.IsAny<Expression>)).Returns(new MyObject());

我错过了什么?

【问题讨论】:

    标签: c# generics moq


    【解决方案1】:

    我不知道你是否已经能够解决这个问题,但是你将错误的类型参数传递给It.IsAny&lt;&gt;

    您对Setup 的调用实际上应该是:

    mock.Setup(foo => foo.Single(It.IsAny<Expression<Func<MyObject, bool>>>()))
        .Returns(new MyObject());
    

    【讨论】:

      【解决方案2】:

      如果我理解您要做什么,Single 是一种静态/扩展方法,不能用 Moq 来模拟。 Moq 通过对被测对象进行子类化来工作,因此静态方法不起作用。您必须在 Any 方法上设置模拟(只要您的 Any 方法本身不是扩展方法。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-22
        相关资源
        最近更新 更多