如何使Asoc.AreEqual传递POCO

时间:2011-07-06 05:22:52

标签: c# visual-studio-2010 unit-testing

Assert.AreEqual在POCO上失败。然而,它并没有失败POCO中的个别项目。如何使它在VS 2010中的完整POCO上运行

3 个答案:

答案 0 :(得分:4)

您的POCO是否以适当的方式覆盖Equals?如果没有,那就是问题所在。覆盖EqualsGetHashCode,您应该没问题。

这假设你需要涵盖的只有一个平等概念。另一种方法是在另一个类中实现IEqualityComparer<T>,然后使用它。 (我不知道Assert.AreEqual是否采用可选的IEqualityComparer<T>参数,但您可以随时明确地调用它。)

答案 1 :(得分:2)

您可以查看expected objects library。它非常整洁,并在幕后为您处理所有比较逻辑,使您的代码更加轻松和轻松。你甚至可以告诉它忽略类型,所以如果你想只检查一个对象的几个属性,你可以将它与一个对象或任何相关的东西进行比较。

答案 2 :(得分:2)

测试失败,因为您的对象不相等。它们的字段可能具有相同的值,但这并不能使它们相等。默认情况下,如果对象具有相同的地址,则它们是相等的,因此它们是同一个对象。

要获得所需的行为(这是您希望具有相同值的属性的对象相等),您需要覆盖Equals并定义使对象相等的内容。如果这是所有属性,请在此处检查所有属性。如果它只是一些,那么只检查那些。做任何需要做的事情来确定你的背景中的平等。

如果您要覆盖Equals,则还应覆盖GetHashCode,并确保当Equals为两个对象GetHashCode时为{0}时返回相同的值。