FluentAssertions:ShouldBeEquivalentTo与Should().Be()与Should().BeEquivalentTo有什么区别?

47

有谁能够概括它们之间的区别和使用范围吗?

我阅读了SO文章,

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

在我看来,如果Should().BeEquivalentTo()执行深度比较,则ShouldBeEquivalientTo()Should().BeEquivalentTo()的工作方式相似。


对于字符串比较,ShouldBeEquivalentTo 表示不区分大小写的匹配。 - Michael Freidgeim
1个回答

54

我同意这很令人困惑。Should().BeEquivalentTo()实际上应该被称为Should().EqualInAnyOrder()或类似的名称。正如你所说,它使用涉及对象的Equals实现来查看所有在expected集合中出现在actual集合中的对象,而不考虑顺序。我需要在下一个主要版本中修复这个问题。


谢谢。Should().Be() 怎么样呢?它的工作方式是类似还是完全等同于其中一个? - Youngjae
3
只有Should().Equal()Should().BeEquivalentTo()相同,但需要严格顺序。这就是为什么我建议将BeEquivalentTo重命名为EqualInAnyOrder的原因。 - Dennis Doomen
4
这个问题已经在5.0中解决。请访问http://www.continuousimprover.com/2018/02/fluent-assertions-50-best-unit-test.html,了解更多详情。 - Dennis Doomen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接