8

I am trying to compare two Lists using

 CollectionAssert.AreEqual(ListExpected, ListActual);

But I am getting an exception

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>

But when I compared the zero element using Assert.AreEqual on field by field everything was fine.

Any idea why I cannot compare using CollectionAssert

4

1 回答 1

11

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

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

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

于 2012-04-20T18:49:28.527 回答