Junit assertEquals抛出NullPointerException,但equals方法不抛出

Junit assertEquals抛出NullPointerException,但equals方法不抛出,junit,nullpointerexception,Junit,Nullpointerexception,我有两个列表对象,希望检查每个对象的前几项是否相等。但是,我在这一行得到一个NullPointerException: assertEquals(instance.getPlane(0), planes.get(0)); 这是整个堆栈跟踪: Testcase:testGetPlane(mypackage.PlaneTest):导致错误 空 java.lang.NullPointerException 在mypackage.PlaneTest.testGetPlane(PlaneTest.jav

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

assertEquals(instance.getPlane(0), planes.get(0));
这是整个堆栈跟踪:

Testcase:testGetPlane(mypackage.PlaneTest):导致错误

java.lang.NullPointerException
在mypackage.PlaneTest.testGetPlane(PlaneTest.java:60)

(第60行是断言。)

这些对象都不是空的。让调试器工作还有一个问题,因此我将这些打印输出添加到测试用例中:

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在尝试编写错误消息时引起的

在中,有以下几行:

String expectedString = String.valueOf(expected);
String actualString = String.valueOf(actual);
if (expectedString.equals(actualString)) { ... }
如果
obj
不为空,则返回
obj.toString()

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