我有2个对象(一手制作是我的预期,一个来自数据库)我正在努力确保它们是平等的。不是因为它们是相同的引用,而是它们中的数据匹配。
我正在使用Assert.AreEqual()
但只获得一般性错误消息,例如。
Expected: <Namespace.ObjectFoo>
But was: <Namespace.ObjectFoo>
如何进一步钻取以显示哪些属性不匹配?
答案 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
数据报告,其格式为您想要的相等比较失败的字段,如果有的话。