2017-04-06 73 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修復了錯誤。

相關問題