assertEquals抛出一个NullPointerException,但equals方法不会

我有两个列表对象,并且希望检查每个对象的第一项是否相等。 但是,在这一行我得到一个NullPointerException:

assertEquals(instance.getPlane(0), planes.get(0));

这是整个堆栈跟踪:

测试用例:testGetPlane(mypackage.PlaneTest):导致错误
空值
显示java.lang.NullPointerException
在mypackage.PlaneTest.testGetPlane(PlaneTest.java:60)

(第60行是断言。)

这两个对象都不为null。 我有一个单独的问题让调试器工作,所以我将这些打印输出添加到我的测试用例中:

System.err.println("equals? " + instance.getPlane(0).equals(planes.get(0)));
System.err.println("equals? " + planes.get(0).equals(instance.getPlane(0)));

但是,这些行不会引发任何错误!

我已经清理并构建了该项目并重新启动了Netbeans,但仍然存在此问题。

JUnit只是调用expected.equals(actual) ,它应该与我的打印输出完全一样,不会抛出错误,对吗? 为什么会assertEquals抛出一个NullPointerException,但在相同的对象不equals


(当我发现修复程序时,我正准备单独发布这个问题,但是由于这是一种痛苦,我无论如何都希望这可以帮助其他人,所以我没有发现任何其他的问题。)

错误实际上是由JUnit在尝试编写错误消息时引起的。

format函数中,有以下几行:

String expectedString = String.valueOf(expected);
String actualString = String.valueOf(actual);
if (expectedString.equals(actualString)) { ... }

如果obj不为null,则String.valueOf(Object obj)将返回obj.toString()

我的对象的toString方法只是返回一个“name”字段,它在测试中从未设置过。 所以,该对象不是null,但该函数返回null。 当JUnit尝试调用expectedString.equals时,这导致了NullPointerException。 确保toString永不返回null修复了错误。

链接地址: http://www.djcxy.com/p/76225.html

上一篇: assertEquals throws a NullPointerException, but equals method does not

下一篇: Comparable and (MyClass)null