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修复了错误。
上一篇: assertEquals throws a NullPointerException, but equals method does not