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

Posted

技术标签:

【中文标题】FluentAssertions:ShouldBeEquivalentTo vs Should().Be() vs Should().BeEquivalentTo()?【英文标题】:FluentAssertions: ShouldBeEquivalentTo vs Should().Be() vs Should().BeEquivalentTo()? 【发布时间】:2014-11-13 13:20:05 【问题描述】:

谁能总结一下它们之间的区别和使用范围?

我读过 SO 文章,

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

以我的拙见,如果Should().BeEquivalentTo() 进行深入比较,ShouldBeEquivalientTo()Should().BeEquivalentTo() 的工作原理相似。

【问题讨论】:

对于字符串比较ShouldBeEquivalentTo表示不区分大小写匹配 【参考方案1】:

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

【讨论】:

谢谢。 Should().Be() 怎么样?它的工作原理是否与其中之一相似或完全等效? 只有Should().Equal()Should().BeEquivalentTo() 功能相同,但需要严格排序。这就是为什么我建议将 BeEquivalentTo 重命名为 EqualInAnyOrder 这已在 5.0 中得到解决。在continuousimprover.com/2018/02/… 阅读所有相关信息

以上是关于FluentAssertions:ShouldBeEquivalentTo vs Should().Be() vs Should().BeEquivalentTo()?的主要内容,如果未能解决你的问题,请参考以下文章

FluentAssertions 是不是支持字典的 WithStrictOrdering?

FluentAssertions 不应该包含失败

Fluentassertions.ShouldBeEquivalentTo 中的 Ignoredatamember

FluentAssertions:int.Should().Equals 返回错误的结果?

使用 FluentAssertions API 4.x 语法迁移 xunit 项目以使用 FluentAssertions v5.x 版本运行

FluentAssertions 断言单个对象的多个属性