CollectionAssert.AreEqual失败

时间:2012-04-20 18:32:32

标签: c# .net nunit

我正在尝试使用

比较两个列表
 CollectionAssert.AreEqual(ListExpected, ListActual);

但我得到了一个例外

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>

但是当我逐字段地使用Assert.AreEqual比较零元素时,一切都很好。

知道为什么我无法使用CollectionAssert

进行比较

1 个答案:

答案 0 :(得分:11)

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

当您覆盖Equals时,请不要忘记覆盖GetHashCode - 这些必须一起覆盖。

如果由于某种原因您不想或不能覆盖Equals,可以使用IComparer的{​​{3}}来帮助比较收集元素。