Junit assertEquals抛出NullPointerException,但equals方法不抛出
我有两个列表对象,希望检查每个对象的前几项是否相等。但是,我在这一行得到一个NullPointerException: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
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,修复了错误