2017-04-06 67 views
1

我有两个列表对象,并希望检查每个的第一项是相等的。不过,我在这条线得到一个NullPointerException:assertEquals抛出一个NullPointerException,但等于方法不

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

这是整个堆栈跟踪:

测试用例: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对同一个对象不会?

回答

1

(我正要独自发布问题时,我发现了修复,但因为它是一个痛苦,我反正张贴,希望这可以帮助别人。我没有发现其中有此解决方案的任何其他问题。)

该错误是实际上引起JUnit中,当它试图撰写一个错误消息。

the format function,有行:

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

String.valueOf(Object obj)回报obj.toString()如果obj没有空。

我对象的toString方法简单地返回“名称”字段,这是从来没有设置测试里面。所以,该对象不是null,但该函数返回null。当JUnit试图调用expectedString.equals时,这导致了NullPointerException。确保toString永不返回null修复了错误。

相关问题