服务正在调用存储库函数“GetManyIncluded”,其具有如下所述的签名
IQueryable<T> GetManyIncluded(Expression<Func<T, bool>> where, params Expression<Func<T, object>>[] children);
在测试方法中,我正如下面提到的那样设置
mockedWrapper.Setup(x => x.DomainObject.GetManyIncluded(It.IsAny<Expression<Func<DomainObject, bool>>>(), It.IsAny<Expression<Func<DomainObject, object>>[]>())).Returns<Expression<Func<DomainObject, bool>>>(expr => listOFObjects.Where(expr.Compile()).ToList().AsQueryable());
这给了我服务中的参数计数不匹配异常。
请帮忙。
答案 0 :(得分:0)
再次提出解决方案,提问者发现了自己。
当您使用Returns
的一个重载时,会出现问题,该重载会引入Func
委托。 Func
必须 取零参数(即Func<TResult>
,其中TResult
在编译时已知为IQueryable<DomainObject>
1}} < em>或获取与您设置的方法匹配的完整参数列表(Func<T1, T2, T3, ..., Tn, TResult>
其中 n T
与模拟方法的参数列表完全匹配)
您尝试使用模拟方法中的参数子集,但这是不允许的(将在没有错误的情况下执行Setup
,但在模拟器上调用方法时将失败并出现参数计数不匹配异常对象)。
因此解决方案是:
mockedWrapper
.Setup(x => x.DomainObject.GetManyIncluded(
It.IsAny<Expression<Func<DomainObject, bool>>>(),
It.IsAny<Expression<Func<DomainObject, object>>[]>()
))
.Returns(
(
Expression<Func<DomainObject, bool>> where,
Expression<Func<DomainObject, object>>[] children
)
=> listOFObjects.Where(where.Compile()).ToList().AsQueryable()
);