CollectionAssert.AreEqual失败

Nig*_*ker 8 .net c# nunit

我试图比较两个列表使用

 CollectionAssert.AreEqual(ListExpected, ListActual);
Run Code Online (Sandbox Code Playgroud)

但我得到一个例外

Expected and actual are both <System.Collections.Generic.List`1[API.Program.Relation]> with 11 elements
  Values differ at index [0]
  Expected: <API.Program.Relation>
  But was:  <API.Program.Relation>
Run Code Online (Sandbox Code Playgroud)

但是当我Assert.AreEqual逐场比较零元素时,一切都很好.

知道为什么我无法比较使用 CollectionAssert

das*_*ght 11

如果一个对象的Equals(object other)方法返回true,则"声明"该对象等于.NET中的另一个对象.您需要为您的API.Program.Relation类实现该方法,否则.NET会将您的对象视为不同,除非它们是引用相等的.所有字段都相同的事实与.NET无关:如果您需要逐字段相等语义,则需要提供Equals支持它的实现.

当你覆盖时Equals,不要忘记覆盖GetHashCode- 这些必须一起覆盖.

如果Equals由于某种原因不想或不能覆盖,则可以使用带有实例的重载CollectionAssert.AreEqualIComparer来帮助比较集合元素.

  • 当您重写Equals/GetHashCode时,请考虑使该类也是不可变的. (3认同)