带有lambda表达式的Moq TargetParameterCountException

时间:2011-11-03 19:02:03

标签: c# lambda nunit moq

我有一个奇怪的问题:当我使用mu存储库存根时,我会遇到奇怪的异常:

System.Reflection.TargetParameterCountException

创建存根(在测试方法中):

var repositoryStub = new Mock<IRepository<User>>();
repositoryStub.Setup(m => m.FindAll(It.IsAny<Expression<Func<User,bool>>>())).Returns(TestGlobals.TestUsers.AsQueryable<User>);

接口:

IQueryable<T> FindAll(System.Linq.Expressions.Expression<Func<T, bool>> whereExpression);

每次调用 FindAll 都会引发错误:(我在很多其他地方以这种方式嘲笑,但现在我找不到那个奇怪问题的来源:(

1 个答案:

答案 0 :(得分:13)

AsQueryable来电后你错过了一对括号:

repositoryStub.Setup(m => m.FindAll(It.IsAny<Expression<Func<User,bool>>>())).Returns(TestGlobals.TestUsers.AsQueryable<User>());

Returns方法有多个重载,大多数都使用Func,没有括号,它使用其中一个重载,因为你还没有指定一个参数,这就是为什么它会抛出一个异常。