我正尝试使用FluentAssertionsx 1 e0f1x比较DTO与其相应的实体。我的实体有一些额外的元数据属性,而我的DTO没有。
我尝试使用ExcludingMissingMembers
选项排除这些额外的属性,甚至显式地排除每个成员本身,如下所示:
result.Entity.Should().BeEquivalentTo(dto, opt => opt
.ExcludingMissingMembers()
.Excluding(x => x.ValidationResult)
.Excluding(x => x.CreatedBy)
.Excluding(x => x.CreatedAt));
但是由于DTO不具有的额外属性,我的测试总是失败。
消息:预期结果。要使用的实体(类型为Entity)
实体
{
创建时间=〈0001-01-01 00:00:00.000〉
创建人=
财务资源来源= {人工,人工}
感兴趣的产品= {固定收益,固定收益}
确认结果=
},但找到
德托
{
财务资源来源= {人工,人工}
感兴趣的产品= {固定收益,固定收益}
}
配置:
- 使用声明的类型和成员
- 按值比较枚举
- 排除成员验证结果
- 排除成员创建者
- 排除成员创建于
- 按名称(或引发)匹配成员
- 严格控制字节数组中项的顺序
- 没有自动转换。
我错过了什么?
3条答案
按热度按时间tez616oj1#
因此,快速测试结果:
这应按预期工作。
您的错误似乎是显式exclude,因为成员(变量x)应该来自DTO,而在DTO中它们并不存在
pexxcrt22#
来自ExcludingMissingMembers()的源代码:
尝试将主题的成员与期望中同名的成员进行匹配。忽略期望中不存在的那些成员以及以前注册的匹配规则。
在您的场景中,“expectation”是
dto
对象,因为entity
(subject)具有dto
对象的所有属性,所以没有什么可忽略的。您可以通过交换
dto
和entity
的位置来获得所需的结果交换位置后,
entity
变为“期望值”,dto
(主题)上缺少的属性将被忽略然而,这种方法使失败消息有点混乱,例如,当
result.Entity
是null
时,消息将是:* 实体应为,但找到的是Dto {..}*a64a0gku3#
流体Assert6.8.0