在比较对象时,如何让NUnit更具体地说明哪些字段不匹配?

时间:2012-01-06 19:53:40

标签: c# nunit

我有2个对象(一手制作是我的预期,一个来自数据库)我正在努力确保它们是平等的。不是因为它们是相同的引用,而是它们中的数据匹配。

我正在使用Assert.AreEqual()但只获得一般性错误消息,例如。

Expected: <Namespace.ObjectFoo>
But was: <Namespace.ObjectFoo>

如何进一步钻取以显示哪些属性不匹配?

5 个答案:

答案 0 :(得分:3)

在Namespace.ObjectFoo类上添加.ToString()覆盖,描述对象的内容。 <Namespace.ObjectFoo>.ToString()上定义的System.Object实施的输出。

答案 1 :(得分:3)

您可以覆盖Equals,以便Asser.AreEqual使用它。或者逐个比较每个属性。

答案 2 :(得分:1)

我假设您已经覆盖Equals /使类Equatable,以便即使实例不同,您也可以实际获得相等。为什么不调试测试并查看Equals实现中的相等性失败?

答案 3 :(得分:1)

让objectFoo实现icomparable并将比较逻辑放在CompareTo方法中,如果你想要更精细的粒度测试比较,那么只需为每个属性编写一个测试。

单元测试的核心概念之一是一次只测试一件事,如果你有2个复杂的对象,你应该比较每个属性的个性,除非你想让你的类具有可比性。

答案 4 :(得分:1)

不太确定如何将这两个对象的* 内容 *与Assert.AreEqual()进行比较。我认为您需要在mock对象中引入一些Compare方法,该方法迭代两者的字段并累积,让我们在一些string内容中说明内容不匹配的字段。 您可以实施IComparable,覆盖Equals,实施自定义方法或其他任何方法。

执行该Compare方法后,您将获得一个string数据报告,其格式为您想要的相等比较失败的字段,如果有的话。