我使用dotPeekAssert.AreEqual
反编译(在Microsoft.VisualStudio.QualityTools.UnitTestFramework
GAC 程序集中),发现最终会导致以下调用 where is和is :Assert.AreEqual(aux, oClass.MyObject)
aux
expected
oClass.MyObject
actual
object.Equals((object) expected, (object) actual)
从我们阅读的静态文档中:object.Equals(Object, Object)
静态 Equals(Object, Object) 方法指示两个对象 objA 和 objB 是否相等。它还使您能够测试值为 null 的对象是否相等。它比较 objA 和 objB 是否相等,如下所示:
它确定两个对象是否代表相同的对象引用。如果是,则该方法返回 true。此测试等效于调用 ReferenceEquals 方法。此外,如果 objA 和 objB 都为 null,则该方法返回 true。
它确定 objA 或 objB 是否为空。如果是,则返回 false。
如果这两个对象不代表同一个对象引用且都不为 null,则调用 objA.Equals(objB) 并返回结果。这意味着如果 objA 覆盖 Object.Equals(Object) 方法,则调用此覆盖。
现在,List<T>
已知是引用类型,并且我们知道您要比较的两个列表都不是 null,因此您的两个对象之间的最终比较将是
expected.Equals(actual)
由于List<T>
不覆盖Equals
,它使用执行引用比较的基础对象实现,因此失败(expected
并且actual
分别“新”)。
您想要的是结构比较,即列表中元素的成对相等。CollectionAssert.AreEqual
有关该 ( )的正确断言,请参阅@ReedCopsey 答案。