Moq Returns 具有多个 Linq 表达式
Moq Returns with multiple Linq Expressions
我在尝试模拟的存储库中有以下方法:
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 表达式的问题。
如能提供任何帮助,我们将不胜感激。
您的 GetAll
方法采用三个参数并且 return 是一个 IEnumerable<TEntity>
。 Returns
中的 valueFunction
参数需要具有匹配的签名和 return 类型。您示例中的 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>
}));
我在尝试模拟的存储库中有以下方法:
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 表达式的问题。
如能提供任何帮助,我们将不胜感激。
您的 GetAll
方法采用三个参数并且 return 是一个 IEnumerable<TEntity>
。 Returns
中的 valueFunction
参数需要具有匹配的签名和 return 类型。您示例中的 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>
}));