我在我试图模拟的存储库中有以下方法:
IEnumerable<TEntity> GetAll(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "")
我已经设置了以下内容:
mockContactNumberRepository.Setup(x => x.GetAll(
It.IsAny<Expression<Func<ContactNumber, bool>>>(),
It.IsAny<Func<IQueryable<ContactNumber>, IOrderedQueryable<ContactNumber>>>(),
It.IsAny<string>()))
.Returns(new Func<Expression<Func<ContactNumber, bool>>,
IQueryable<ContactNumber>>(ex => _contactNumbers.Where(ex.Compile()).AsQueryable()));
运行单元测试时,我收到有关参数计数不匹配的错误消息。我理解这是因为Returns
仅指定了第一个参数,但我不确定如何指定其他参数。
我发现很多问题都提出类似问题,但没有找到一个有多个lambda表达式的问题。
非常感谢您提供的任何帮助。
答案 0 :(得分:1)
您的GetAll
方法接受三个参数并返回IEnumerable<TEntity>
。 valueFunction
中的Returns
参数需要具有匹配的签名和返回类型。示例中的valueFunction
参数只有两个输入参数,第二个参数与传递给GetAll
的任何参数类型都不匹配。它应该看起来像这样(我没有编译器检查我的语法的好处,但我认为我在这里应该是正确的):
mockContactNumberRepository
.Setup(x =>
x
.GetAll(
It.IsAny<Expression<Func<ContactNumber, bool>>>(),
It.IsAny<Func<IQueryable<ContactNumber>, IOrderedQueryable<ContactNumber>>>(),
It.IsAny<string>()))
.Returns(new Func<
Expression<Func<ContactNumber, bool>>,
Func<IQueryable<ContactNumber>, IOrderedQueryable<ContactNumber>>,
string,
IEnumerable<TEntity>>((arg1, arg2, arg3) =>
{
// arg1 is Expression<Func<ContactNumber, bool>>
// arg2 is Func<IQueryable<ContactNumber>, IOrderedQueryable<ContactNumber>>
// arg3 is string
// Do something here and return an IEnumerable<TEntity>
}));