带有lambda表达式的Moq TargetParameterCountException

mgi*_*bas 4 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>);
Run Code Online (Sandbox Code Playgroud)

接口:

IQueryable<T> FindAll(System.Linq.Expressions.Expression<Func<T, bool>> whereExpression);
Run Code Online (Sandbox Code Playgroud)

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

nem*_*esv 13

你在AsQueryable电话会议后错过了一对括号:

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

Returns方法有多个重载,并且大多数都使用Func而没有括号,它使用其中一个重载,因为您没有指定一个参数,这就是它抛出异常的原因.