java意外的JUnit行为
我正在使用一个有很多单元测试的Java Web应用程序。我们在Eclipse中运行单元测试。我正在进行测试,并对其中一些进行重构。我见过一些这样编写的测试(我将把它归结为断言,我的文字示例实际上是测试中的变量)
assertEquals(new Integer(7), new Long(7));
这个测试通过了!,我不明白为什么,因为类型不同。看到这种行为后,我在Eclipse中创建了一个简单的Java项目,并编写了基本相同的单元测试
assertEquals(new Integer(7), new Long(7);
正如我所料,它失败了。我不需要任何帮助,我只是好奇测试如何在一个环境中通过,而在另一个环境中失败(应该如此)
# 1 楼答案
如果你看看java的equals方法。朗,上面写着:
所以
new Long(7).equals(new Integer(7))
应该是false,因为整数instanceof Long是false。本测试程序确认:打印出来的
我猜得出相反结果的web应用程序测试使用了一个类似ComparableAssert的附加组件,它有这个签名
这很容易被误认为是另一种,尤其是当测试使用静态导入时。long和integer是可比较的(
new Long(7).compareTo(new Integer(7))
的值为0),所以这个断言会成功