我正在尝试使用
比较两个列表 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
答案 0 :(得分:11)
对象被“声明”等于.NET中的另一个对象,如果它的Equals(object other)
方法返回true。您需要为API.Program.Relation
类实现该方法,否则.NET会将您的对象视为不同,除非它们是引用相等的。所有字段都相同的事实与.NET无关:如果您需要逐字段相等语义,则需要提供支持它的Equals
实现。
当您覆盖Equals
时,请不要忘记覆盖GetHashCode
- 这些必须一起覆盖。
如果由于某种原因您不想或不能覆盖Equals
,可以使用IComparer
的{{3}}来帮助比较收集元素。