使用`ShouldBeEquivalentTo`,`ShouldAllBeEquivalentTo`和`BeEquivalentTo`

Jam*_*ood 8 c# unit-testing fluent-assertions

我在我的单元测试流利断言工作,但是使用的ShouldBeEquivalentTo,ShouldAllBeEquivalentTo以及BeEquivalentTo目前还不清楚.

例如; 所有以下语句都通过,因此函数看起来是等效的.

List<string> a = new List<string>() { "james", "wood" };
List<string> b = new List<string>() { "james", "wood" };

a.ShouldBeEquivalentTo(b);
a.ShouldAllBeEquivalentTo(b);
a.Should().BeEquivalentTo(b);
Run Code Online (Sandbox Code Playgroud)

我为什么要使用一个而不是另一个?

Den*_*men 11

ShouldBeEquivalentTo并且ShouldAllBeEquivalentTo是相同的,并将进行递归结构比较.但由于行为是高度可配置的,因此某些选项支持使用属性表达式来包含或排除某些成员.但是,T表达式中的含义是指使用List<string>时的根对象()的类型ShouldBeEquivalentTo,以及string是否ShouldAllBeEquivalentTo使用了它.前者作用于整个物体而后者作用于整个物体IEnumerable<T>.

Should().BeEquivalentTo()是一个更简单的实现,它将只使用顺序不敏感的比较Equals.此方法将在下一次更改(v5.x)中删除.

  • https://continuousimprover.com/2018/02/fluent-assertions-50-best-unit-test.html#upgrading-tips中描述的V5更改 (2认同)