unit-testing - 使用 Moq 的 lambda 表达式 stub 上的参数计数不匹配

标签 unit-testing lambda moq

当我想测试我的租户存储库时,出现“参数计数不匹配”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();

错误发生在最后一行。

最佳答案

找到正确参数的解决方案:

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());

关于unit-testing - 使用 Moq 的 lambda 表达式 stub 上的参数计数不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21482578/

相关文章:

php - 我可以使用 Laravel 的 `call` 方法在单元测试中发送原始 JSON 数据吗?

c# - EF Moq 单元测试,不确定验证

c# - 尝试为 ASP.Net Core 3.1 单元测试创​​建 Mock.Of<ControllerContext>() 时出错

php - 无法进行单元测试 : $_SESSION empties before each test is ran

iphone - Xcode 单元测试 - 从应用程序包访问资源?

c# - argument null异常和invalid异常怎么写?

language-agnostic - 什么是 lambda ?

java - 支持 Java 8 中的 lambda 表达式

c# - 根据 ID 从列表中查找项目

c# - Moq When(Func<bool>) 方法的使用