FluentAssertions:ShouldBeEquivalentTo vs Should().Be()vs Should().BeEquivalentTo()?

You*_*jae 28 c# comparison fluent-assertions

任何人都可以总结它们之间的差异和使用范围吗?

我读了SO文章,

  • ShouldBeEquivalientTo():ShouldBeEquivalentTo()旨在用于比较复杂的对象图,而不是.NET框架的基本类型部分.
  • 应该().BeEquivalentTo():单个项目Equals()实现以验证等效性并且自版本1以来一直存在.在FA 2.0中引入的较新的ShouldBeEquivalenTo()正在进行深入的结构比较并报告任何差异.
  • 应该().Be():找不到.

在我的谦虚理解ShouldBeEquivalientTo()Should().BeEquivalentTo()工作相似的情况下,如果Should().BeEquivalentTo()进行深入的比较.

Den*_*men 33

我同意这令人困惑.Should().BeEquivalentTo()实际应该被称为Should().EqualInAnyOrder()或类似的东西.正如您所说,它使用所Equals涉及对象的实现来查看expected集合中的所有对象是否都出现在actual集合中,而不管顺序如何.我需要为下一个主要版本修复它.

  • 这已在5.0中解决。请在http://www.continuousimprover.com/2018/02/fluent-assertions-50-best-unit-test.html上阅读所有内容 (3认同)
  • 只有`Should().Equal()`与`Should()相同.BeEquivalentTo()`但需要严格的排序.这就是为什么我建议将`BeEquivalentTo`重命名为`EqualInAnyOrder`. (2认同)