使用Assert.AreEqual()比较两个对象的对象,我想通过使用Assert.AreEqual()方法将它与另一个对象列表进行比较。我试过这样做,但即使两个对象相同,断言也会失败。我想知道这个方法,这两个参数是否比较引用或对象的内容,我是否必须重载==运算符才能使其工作?如果您使用的是NUnit,这就是文档所说的自版本2.2以来,还有用于比较一维数组的特殊规定。Assert.AreEqual认为两个数组相等,如果它们的长度相同并且每个对应的元素都相等。注意:目前不支持多维数组、嵌套数组(数组的数组)和其他集合类型(例如ArrayList)。通常,如果要比较两个对象并希望具有基于值的相等性,则必须重写Equals方法。为了实现你的目标,试试这个:classPerson{publicstringFirstname{get;设置;}公共字符串姓氏{get;设置;}publicoverrideboolEquals(objectother){vartoCompareWith=otherasPerson;如果(toCompareWith==null)返回假;返回this.Firstname==toCompareWith.Firstname&&this.Lastname==toCompareWith.Lastname;在你的单元测试中:Assert.AreEqual(expectedList.ToArray(),actualList.ToArray());这些答案对于这个问题来说太复杂了。比较两个列表没有必要的覆盖,你不需要打破多个断言。Microsoft使用以下类CollectionAssert。CollectionAssert.AreEqual(expectedList,actualList)这适用于列表、字典和任何其他实现ICollection接口的东西。微软文档位于http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.collectionassert.aspx并详细说明了可以对集合进行的各种类型的断言但是,作为@Bart提到,这不适用于(复杂)对象列表,对于这些情况,您可能仍需要重写Equals方法。您可以序列化它们并测试生成的字符串。.NET中的xUnitAssert.AreEqual会检查对象是否相等,但对象标识与值相等性不同,看起来您正在寻找值相等性。IE浏览器。“我列表中的对象是否具有相同的值?”这就是它“失败”的原因,即使每个列表中每个对象的值可能代表相同的值,但两个列表并不相同。通常在测试工作中,测试集合的数量和关键元素就足够了。varcount=listA.Count;Assert.AreEqual(count,listB.Count);Assert.AreEqual(listA.First(),listB.first());Assert.AreEqual(listA.Last(),listB.Last());Assert.AreEqual(listA[count/2],listB[count/2]);最后一个测试不必在中间元素,它只是为了测试列表中的元素,它不是随机元素的唯一原因是因为你现在希望能够重复测试结果。Assert.AreEqual()比较引用。通常在比较列表时,我会将项目的数量与列表中某个确切项目的某些属性进行比较,或者直接比较列表中的项目(但还是通过引用)。如果您想按内容比较对象而不是实现一些递归对象比较器,但我认为它不适合单元测试,因为您希望它们始终尽可能快地运行。以上就是C#学习教程:使用Assert.AreEqual()比较两个对象共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
