当我想测试我的租户存储库时,我得到'参数计数不匹配'TargetParameterCountException:
界面:
public interface ITenantRepository
{
IQueryable<Tenant> Get(Expression<Func<Tenant, bool>> filter = null,
Func<IQueryable<Tenant>, IOrderedQueryable<Tenant>> orderBy = null,
string includeProperties = null);
}
测试代码:
var TenantRepository = new Mock<ITenantRepository>();
TenantRepository
.Setup(p => p.Get(It.IsAny<Expression<Func<Tenant, bool>>>(),
It.IsAny<Func<IQueryable<Tenant>,IOrderedQueryable<Tenant>>>() ,
It.IsAny<string>()))
.Returns(new Func<Expression<Func<Tenant, bool>>,
IQueryable<Tenant>>(expr => Tenants.Where(expr.Compile()).AsQueryable()));
Tenant TestTenant = TenantRepository.Object.Get(
t => t.TenantID == Tenant2.TenantID,
null,
null).FirstOrDefault();
错误发生在最后一行。
答案 0 :(得分:2)
找到正确参数的解决方案:
TenantRepository.Setup(p => p.Get(It.IsAny<Expression<Func<Tenant, bool>>>(),
It.IsAny<Func<IQueryable<Tenant>, IOrderedQueryable<Tenant>>>(),
It.IsAny<string>()))
.Returns(
(Expression<Func<Tenant, bool>> expr,
Func<IQueryable<Tenant>, IOrderedQueryable<Tenant>> orderBy,
string includeProperties) => Tenants.Where(expr.Compile()).AsQueryable());
答案 1 :(得分:0)
我认为问题在于模拟对象的返回类型:根据您的界面,方法Get应返回IQueryable
,但您正在嘲笑它返回Func<Expression<Func<Tenant, bool>>, IQueryable<Tenant>>
。< / p>
请记住,返回一个函数与返回其结果不同;在这种情况下,您应该创建一个预期的IQueryable
对象,然后告诉Moq返回它。使用其预期行为来模拟某些东西没有多大意义 - 这看起来就像你在这里尝试做的那样。