Moq 模拟带有表达式参数的函数
Moq mocking a function with expression parameters
我在 IRepository 中模拟一个函数时遇到问题,需要有关准确模拟该函数的代码的帮助
我尝试在 Moq 中为 It 对象中的任何参数模拟函数,但无法解析
这是我的 IRepository 接口中 ListAsync 的函数声明,我需要使用 where 和 include 参数模拟第二个函数声明
Task<IEnumerable<TEntity>> ListAsync(params Expression<Func<TEntity, object>>[] include);
Task<IEnumerable<TEntity>> ListAsync(Expression<Func<TEntity, bool>> where, params Expression<Func<TEntity, object>>[] include);
函数调用如下:
var result = await _unitOfWork.XXXRepository.ListAsync(p => p.clientId == clientId);
我试过的代码是:
_unitOfWork.Setup(x => x.XXXRepository.ListAsync(p => It.IsAny<Expression<Func<XXX, bool>>>())).ReturnsAsync(XXXs.AsEnumerable());
_unitOfWork.Setup(x => x.XXXRepository.ListAsync(p => Id == id)).ReturnsAsync(XXXs.AsEnumerable());
_unitOfWork.Setup(x => x.XXXRepository.ListAsync(p => p.Id == 1)).ReturnsAsync(XXXs.AsEnumerable());
有趣的是,最后一个解决方案 p=>p.Id ==1
在实际函数代码类似于 Where(p=>p.Id ==1)
时有效,但当我在实际函数中获取 id 作为参数时它不起作用,如 [=18] =]
我的意思是我手动准备数据 return 其中有 6 个项目并且无法从模拟函数 returning 结果中获取任何列表项
有解决方案吗?
如果你想模拟第二个重载,你应该可以这样做:
_unitOfWork
.Setup(x => x.XXXRepository.ListAsync(
It.IsAny<Expression<Func<XXX, bool>>>(),
It.IsAny<Expression<Func<XXX, object>>[]>()))
.ReturnsAsync(XXXs.AsEnumerable());
我在 IRepository 中模拟一个函数时遇到问题,需要有关准确模拟该函数的代码的帮助
我尝试在 Moq 中为 It 对象中的任何参数模拟函数,但无法解析
这是我的 IRepository 接口中 ListAsync 的函数声明,我需要使用 where 和 include 参数模拟第二个函数声明
Task<IEnumerable<TEntity>> ListAsync(params Expression<Func<TEntity, object>>[] include);
Task<IEnumerable<TEntity>> ListAsync(Expression<Func<TEntity, bool>> where, params Expression<Func<TEntity, object>>[] include);
函数调用如下:
var result = await _unitOfWork.XXXRepository.ListAsync(p => p.clientId == clientId);
我试过的代码是:
_unitOfWork.Setup(x => x.XXXRepository.ListAsync(p => It.IsAny<Expression<Func<XXX, bool>>>())).ReturnsAsync(XXXs.AsEnumerable());
_unitOfWork.Setup(x => x.XXXRepository.ListAsync(p => Id == id)).ReturnsAsync(XXXs.AsEnumerable());
_unitOfWork.Setup(x => x.XXXRepository.ListAsync(p => p.Id == 1)).ReturnsAsync(XXXs.AsEnumerable());
有趣的是,最后一个解决方案 p=>p.Id ==1
在实际函数代码类似于 Where(p=>p.Id ==1)
时有效,但当我在实际函数中获取 id 作为参数时它不起作用,如 [=18] =]
我的意思是我手动准备数据 return 其中有 6 个项目并且无法从模拟函数 returning 结果中获取任何列表项
有解决方案吗?
如果你想模拟第二个重载,你应该可以这样做:
_unitOfWork
.Setup(x => x.XXXRepository.ListAsync(
It.IsAny<Expression<Func<XXX, bool>>>(),
It.IsAny<Expression<Func<XXX, object>>[]>()))
.ReturnsAsync(XXXs.AsEnumerable());