【发布时间】:2021-12-22 23:26:33
【问题描述】:
给定 2 种具有不同属性的不同对象类型,X 类和 Y 类:
| X (Source) | Y (Destination) |
|---|---|
| AA | A |
| B | B |
| C | C |
| D |
映射后,我尝试比较属性的等效性,如下所示:
- X.B 应该等于 Y.B,否则失败
- X.C 应该等于 Y.C,否则失败
- X.D 应该被忽略并且不会导致任何失败,因为 Y 不会 包含“D”
- Y.A 应该会导致失败,因为 X 不包含 'A'
使用 FluentAssertions 我可以得到非常接近的结果:
Y.Should().BeEquivalentTo(X, options => options.ExcludingMissingMembers());
这里唯一的问题是最后一个标准将不被满足:YA将被忽略(因为我们需要在这里测试失败,因为目标具有源上不存在的属性,因此没有被映射)。
【问题讨论】:
-
“它应该失败”是什么意思?它永远不能被映射到到,不是吗?那么,它失败或不失败的条件是什么?
-
在这种情况下,永远不会映射正确的“A”。所以条件是,由于 X 没有“A”(但 Y 有),它应该会失败。换句话说,Destination 的 fail 具有 Source 没有的属性。
-
您是否为此使用了一些映射器库?
标签: c# fluent-assertions