assertEquals(Long,Integer)能成功吗?

时间:2013-07-04 10:49:26

标签: java junit

目前我正在进行一些代码审查,我发现这行代码中断了测试用例:

assertEquals(Long.valueOf(4321), lMessage.getNumber());

getNumber会返回Integer,也是4321。 我改成了这个:

assertTrue(4321 == lSavedStoerung.getMessage());

因为在我对equals方法的理解中,assertEquals在第一个例子中永远不会返回true。我的assertTrue所有测试用例运行正常。

或者我理解错了什么?

2 个答案:

答案 0 :(得分:14)

assertEquals测试失败的原因是,等式不仅考虑了数字的值,还考虑了它的类型。 java.lang.Long对象与equal的{​​{1}}不进行比较。

由于java.lang.Integer返回lMessage.getNumber(),因此Java会在传递给int之前将其包装到Integer。这就是为什么你可以使用assertEquals来修改测试用例:

Integer.valueOf

答案 1 :(得分:1)

4321长期背后的原因是什么?如果没有必要使用整数解决方案dasblinkenlight sugested。

assertEquals(Integer.valueOf(4321), lMessage.getNumber());

assertEquals(4321, lMessage.getNumber());

另一方面,如果您的代码允许lMessage.getNumber()根据具体情况返回很长时间,那么您可以将其打包成一个长的测试。

assertEquals(Long.valueOf(4321), (long) lMessage.getNumber());

PS:使用assertTrue& ==如果您比较一些原始数据类型中没有的东西会导致您遇到麻烦,但在这个具体示例中它不会。