我有以下通用方法:
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());
我对此缺少什么?
答案 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方法本身不是扩展方法。)