Assert.AreEqual在POCO上失败。然而,它并没有失败POCO中的个别项目。如何使它在VS 2010中的完整POCO上运行
答案 0 :(得分:4)
您的POCO是否以适当的方式覆盖Equals
?如果没有,那就是问题所在。覆盖Equals
和GetHashCode
,您应该没问题。
这假设你需要涵盖的只有一个平等概念。另一种方法是在另一个类中实现IEqualityComparer<T>
,然后使用它。 (我不知道Assert.AreEqual
是否采用可选的IEqualityComparer<T>
参数,但您可以随时明确地调用它。)
答案 1 :(得分:2)
您可以查看expected objects library。它非常整洁,并在幕后为您处理所有比较逻辑,使您的代码更加轻松和轻松。你甚至可以告诉它忽略类型,所以如果你想只检查一个对象的几个属性,你可以将它与一个对象或任何相关的东西进行比较。
答案 2 :(得分:2)
测试失败,因为您的对象不相等。它们的字段可能具有相同的值,但这并不能使它们相等。默认情况下,如果对象具有相同的地址,则它们是相等的,因此它们是同一个对象。
要获得所需的行为(这是您希望具有相同值的属性的对象相等),您需要覆盖Equals
并定义使对象相等的内容。如果这是所有属性,请在此处检查所有属性。如果它只是一些,那么只检查那些。做任何需要做的事情来确定你的背景中的平等。
如果您要覆盖Equals
,则还应覆盖GetHashCode
,并确保当Equals
为两个对象GetHashCode
时为{0}时返回相同的值。