[英]Can assertEquals(Long,Integer) succeed?
当前,我正在做一些代码审查,发现这行代码中断了测试用例:
assertEquals(Long.valueOf(4321), lMessage.getNumber());
getNumber
返回一个也是4321
的Integer
。 我将其更改为:
assertTrue(4321 == lSavedStoerung.getMessage());
因为根据我对equals方法的理解, assertEquals
在第一个示例中永远不会返回true。 使用我的assertTrue
所有测试用例都运行良好。
还是我理解不对?
assertEquals
测试失败的原因是,相等性不仅考虑数字的值,还考虑其类型。 java.lang.Long
对象不equal
java.lang.Integer
。
由于lMessage.getNumber()
返回一个int
,因此Java在传递给assertEquals
之前将其包装为Integer
。 这就是为什么您可以使用Integer.valueOf
来修复测试用例的原因:
assertEquals(Integer.valueOf(4321), lMessage.getNumber());
4321过长的原因是什么? 如果没有必要,请使用整数解决方案dasblinkenlight sugested。
assertEquals(Integer.valueOf(4321), lMessage.getNumber());
要么
assertEquals(4321, lMessage.getNumber());
另一方面,如果您的代码允许lMessage.getNumber()
根据情况返回长lMessage.getNumber()
,则可以将其lMessage.getNumber()
以进行测试。
assertEquals(Long.valueOf(4321), (long) lMessage.getNumber());
PS:使用assertTrue&==过于自在时,如果您比较原始数据类型中未包含的内容,则会给您带来麻烦,但在此特定示例中不会。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.