首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Moq Expression<Func<>>

Moq Expression<Func<>>
EN

Stack Overflow用户
提问于 2020-02-10 07:45:17
回答 1查看 258关注 0票数 0

我试着模仿Expression<Func<>>在课堂上的工作方式,也就是Im测试。

我最初对此方法的声明如下:

代码语言:javascript
复制
var entity = await _repository.GetByIdAsync(input.Id1, x => x.Id2 == "Some String");

现在我想使用Moq来模拟这个方法

代码语言:javascript
复制
// 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<>>中伪装,以便在最初的实现中精巧地工作?

编辑

当我键入以下内容时:

代码语言:javascript
复制
It.Is<Expression<Func<MyEntity, object>>>(z => z = p => p.Id2 == "Some string")))

我知道这个错误:

严重性代码描述项目文件行抑制状态错误CS1662无法将lambda表达式转换为指定的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型

严重性代码描述项目文件行抑制状态错误CS0029不能隐式地将'System.Linq.Expressions.Expression>‘转换为'bool’

EDIT2

模拟方法的签名:

代码语言:javascript
复制
Task<MyEntity> GetByIdAsync(string id, params Expression<Func<MyEntity, object>>[] @params);
EN

回答 1

Stack Overflow用户

发布于 2020-02-10 08:15:25

我找到了解决办法。您不需要模拟Expression<Func>>,只需像这样将func传递给Moq

代码语言:javascript
复制
_repositoryMock.Setup(x =>
    x.GetByIdAsync(
        It.Is<string>(y => y == input.Id1),
        z => z.Id2 == "Some id"))
.ReturnsAsync(entity);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60146039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档