使用Moq与泛型和Linq表达式

时间:2011-06-09 19:10:13

标签: c# generics moq

我有以下通用方法:

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());

我对此缺少什么?

2 个答案:

答案 0 :(得分:2)

我不知道您是否已经能够解决此问题,但是您将错误的类型参数传递给It.IsAny<>

您对Setup的电话实际上应该是:

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

答案 1 :(得分:0)

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