繁体   English   中英

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

[英]How can I get NUnit to be more specific about which fields don't match when comparing objects?

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

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

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

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

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

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

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

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

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

不太确定如何将这两个对象的* content *与Assert.AreEqual() 我想你需要在你的mock对象中引入一些Compare方法,它迭代两个字段并累积,让我们在某些string说出内容不匹配的字段。 您可以实现IComparable ,覆盖Equals ,实现自定义方法或其他任何方法。

在执行该Compare方法之后,您将获得一个string其中包含您想要的相关比较失败字段的数据报告(如果有)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM