我创建了一个类并重写了equals()方法。当我使用assertTrue(obj1.equals(obj2))
时,它会通过测试;但是,assertEquals(obj1, obj2)
将无法通过测试。有人可以告诉原因吗?JUnit assertEquals()对两个对象失败
回答
我的猜测是,你有没有实际上覆盖equals
- 你已经超载它来代替。在编译时使用@Override
注释来找出这种东西。
换句话说,我怀疑你有:
public boolean equals(MyClass other)
,你应该有:
@Override // Force the compiler to check I'm really overriding something
public boolean equals(Object other)
在你的工作断言,你无疑调用重载方法obj1
和obj2
的编译时间类型都是MyClass
(或不管你的类被称为)。 JUnit的assertEquals
只会呼叫equals(Object)
,因为它不知道更好。
它在我将公共布尔等于(MyClass其他)更改为公共布尔等于(对象其他)时起作用。谢谢乔恩。 – 2011-05-19 15:33:03
@nikel:'Date'是可变的,这使得很难很好地实现平等 - 你可以有一个'HashSet
重新添加评论 - 我想知道为什么日期不会覆盖其等于执行... – nikel 2015-05-13 10:41:34
这里是assertEquals
代码(从Github):
static public void assertEquals(String message, Object expected,
Object actual) {
if (expected == null && actual == null)
return;
if (expected != null && isEquals(expected, actual))
return;
else if (expected instanceof String && actual instanceof String) {
String cleanMessage= message == null ? "" : message;
throw new ComparisonFailure(cleanMessage, (String) expected,
(String) actual);
} else
failNotEquals(message, expected, actual);
}
private static boolean isEquals(Object expected, Object actual) {
return expected.equals(actual);
}
我能想到的只有一个情况下这种行为你描述的方式 - 如果你的equals
方法不正确处理攀比null
值。
你假设JUnit调用的'equals'与传入版本中调用的'equals'是一样的...... – 2011-05-19 15:23:54
@Jon是的,只是注意到你已经正确地猜到了这个问题。 – 2011-05-22 06:52:46
- 1. 的JUnit的assertEquals失败
- 2. Server.Create对象失败错误
- 3. 创建对象“wscript.shell”失败
- 4. 对象范围失败
- 5. c#对象比较失败
- 6. JS:对象迭代失败
- 7. Java的两个Set对象 - hashCode()是相同的,但.equals()失败
- 8. 当减去两个日期时间对象tostring失败
- 9. 插入两个相关的对象在SQLAlchemy中失败
- 10. 如果一个对象失败所有对象回滚
- 11. JUnit TestCase失败
- 12. assertEquals比较对象id而不是对象的内容?
- 13. 有两种方法的jUnit失败
- 14. junit模拟对象
- 15. 当对象B失败时,如何使对象A失败验证
- 16. JUnit测试问题:: assertEquals()
- 17. 为什么我的'AssertEquals()'方法失败?
- 18. 的assertEquals失败,因为多线
- 19. 硒的webdriver - 两个部分 - 一)未对失败的assertEquals测试2)确认元素不存在
- 20. Mockito verifyNoMoreInteractions()使用assertEquals()时失败的测试失败()
- 21. Junit因Aspect失败
- 22. JUnit测试失败
- 23. 两个对象中的通用对象
- 24. EF 4.1和两级对象插入失败
- 25. CodeContracts:ccrewrite失败,对象引用未设置为对象的实例
- 26. Javascript数组对象失败抛出“对象错误”,在IE
- 27. Grails:在创建新对象时验证域对象失败
- 28. 保存子对象时,要保存防止父对象失败
- 29. Ember.js - 西兰花插件:[对象对象]失败:
- 30. 同一个对象的Junit测试
我们需要看到equals方法的代码 – hvgotcodes 2011-05-19 15:18:13
'obj1'和'obj2'是同一类型吗? – 2011-05-19 15:18:39
您是否在调试模式下尝试使用assertEquals重写的相等值? – VirtualTroll 2011-05-19 15:19:15