Use of `ShouldBeEquivalentTo`, `ShouldAllBeEquivalentTo`, an

本文关键字:ShouldAllBeEquivalentTo an ShouldBeEquivalentTo of Use | 更新日期: 2023-09-27 18:27:21

我在单元测试中使用流畅的断言,但ShouldBeEquivalentToShouldAllBeEquivalentToBeEquivalentTo的使用尚不清楚。

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

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);

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

Use of `ShouldBeEquivalentTo`, `ShouldAllBeEquivalentTo`, an

ShouldBeEquivalentToShouldAllBeEquivalentTo相同,将进行递归结构比较。但是,由于行为是高度可配置的,一些选项支持使用属性表达式来包括或排除某些成员。然而,当使用ShouldBeEquivalentTo时,表达式中的T指的是根对象的类型(List<string>),如果使用ShouldAllBeEquivalentTo则指的是string。前者作用于整个对象,而后者作用于CCD_ 11。

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

作为一个概念,列表被视为一个单元。因此,从可读性的角度来看,选择一个选项,单个有效调用是"a.ShouldBeEquivalentTo(b);"。

关于其他人,他们是模糊的。

当比较两个元素集合时,应用复数形式"ShouldAllBeEquivalentTo"。我认为,有人会争辩说,我们正在将这组字符串(A)与这组字符串的(B)进行比较。这里发生的情况是,字符串组作为一个完整的概念收集在List数据结构类型下。因此,我认为使用这种呼吁是错误的。

最后一种形式意味着两件事。首先,对象"a"应该被转换成某种东西。"应该"这个名字没有任何意义。然后,如果结果与列表对象"b"等效,则应进行比较。从逻辑上讲,应该比较两个相同类型的对象。不需要进行额外的转换。

在阅读代码时,我更喜欢以下格式:

列表"A"与另一个列表"B"等价。

List<string> a = new List<string>() { "james", "wood" };
List<string> b = new List<string>() { "james", "wood" };
//creating "IsEquivalentTo" method
bool listsAreEqual = a.IsEquivalentTo(b);
//creating "IsEqualTo" method
listsAreEqual = a.IsEqualTo(b);
//overloading operator ==
listsAreEqual = (a == b);
相关文章:
  • 没有找到相关文章