【发布时间】:2019-03-28 02:58:25
【问题描述】:
如何优雅地断言两个 .NET 对象之间的以下等价性(最好使用 Fluent Assertions 库)?
两个对象结构上等价如果:
- 两个对象都是相同的(运行时)类型,并且
- 两个对象的公共属性是(递归的)结构上等价的。
请注意,subject.Should().BeEquivalentTo(expectation) 不起作用,因为 BeEquivalentTo 不检查类型相等性。例如,如果我们有两个类A 和B,每个类都有一个属性object X { get; set; },那么这两个对象
new A { X = new B { X = new A() }}
和
new B { X = new A { X = new B() }}
将被BeEquivalentTo 视为等效,即使它们的类型及其属性和子属性的类型不匹配,因此在上述定义中不具有结构等效性。
【问题讨论】:
标签: c# unit-testing fluent-assertions