我试着模仿Expression<Func<>>在课堂上的工作方式,也就是Im测试。
我最初对此方法的声明如下:
var entity = await _repository.GetByIdAsync(input.Id1, x => x.Id2 == "Some String");现在我想使用Moq来模拟这个方法
// Arrange
entity.Id2 = "Some id";
// Act
_rRepositoryMock.Setup(x =>
x.GetByIdAsync(
It.Is<string>(y => y == input.Id1),
It.Is<Expression<Func<MyEntity, object>>>(z => z.Id2 == "Some id")))
.ReturnsAsync(entity);从Moq代码中,我得到了这个错误,即Expression<Func<>>并不怀疑Id2的定义。
如何在Moq Expression<Func<>>中伪装,以便在最初的实现中精巧地工作?
编辑
当我键入以下内容时:
It.Is<Expression<Func<MyEntity, object>>>(z => z = p => p.Id2 == "Some string")))我知道这个错误:
严重性代码描述项目文件行抑制状态错误CS1662无法将lambda表达式转换为指定的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型
严重性代码描述项目文件行抑制状态错误CS0029不能隐式地将'System.Linq.Expressions.Expression>‘转换为'bool’
EDIT2
模拟方法的签名:
Task<MyEntity> GetByIdAsync(string id, params Expression<Func<MyEntity, object>>[] @params);发布于 2020-02-10 08:15:25
我找到了解决办法。您不需要模拟Expression<Func>>,只需像这样将func传递给Moq:
_repositoryMock.Setup(x =>
x.GetByIdAsync(
It.Is<string>(y => y == input.Id1),
z => z.Id2 == "Some id"))
.ReturnsAsync(entity);https://stackoverflow.com/questions/60146039
复制相似问题