【发布时间】:2012-03-16 14:31:25
【问题描述】:
在编写单元测试时,我经常遇到equals() 测试中的某些对象(在assertEquals 中)的工作方式与实际环境中的工作方式不同的情况。以某个接口ReportConfig为例。它有id 和其他几个字段。从逻辑上讲,当它们的ids 匹配时,一个配置等于另一个配置。但是当涉及到测试一些特定的实现时,比如XmlReportConfig,显然我想匹配 all 字段。一种解决方案是不在测试中使用equals,而只是遍历对象属性或字段并进行比较,但这似乎不是一个好的解决方案。
因此,除了这种特定类型的情况之外,我想从语义上而不是技术上整理出实现等于的最佳实践。
【问题讨论】:
-
When writing unit-tests, I often face the situation when equals() for some object in tests -- in assertEquals -- should work differently from how it works in actual environment.你为什么想要这个? -
因为有身份,有平等。在很多情况下,身份就足够了,尤其是在数据库应用程序中。但是,在测试中,很容易出现以下情况:您可能会克隆“之前”副本以与“之后”副本进行比较,在这些情况下,身份还不够,您希望更深入地了解对象的实际字段。