2016-02-19 125 views
1

我在寫我與Maven(here)的第一個項目。當我與mvn -Dtest=EchoTest test運行測試,我得到一個構建失敗的Java(行家):如何知道哪裏位於錯誤(無用回溯)

nonAcceptedTypeVerification(EchoTest) Time elapsed: 0.044 sec <<< ERROR! 
java.lang.NullPointerException 
    at EchoTest.initialize(EchoTest.java:50) 

我怎麼能知道更多的恰恰是線在我的代碼觸發NullPointerExcepion?換句話說:如何讓Maven打印整個回溯?

我試過mvn -e,並在target子目錄搜索。

編輯

這裏是挑起的NullPointerException(在EchoText.java)行:

@Before 
public void initialize() throws InterruptedException 
{ 
    system = new EchoActorSystem(); 
    echo_actor = system.actorOf(); <-- line 50 
} 

的一點是,EchoActorSystem是一個相當複雜的類和方法actorOf使得萬噸工作,從system調用許多功能。例如,它調用super.actorOf(),然後修復結果的一些屬性,依此類推。 我通過添加很多Sysytem.out.println來搜索錯誤的行,但我確定這不是正確的工作方式。

+1

哼哼,不是嗎」 t'在EchoTest.initialize(EchoTest.java:50)'夠了嗎?但是如果你想混亂你的日誌,你可以做'mvn -X clean test'。 – Tunaki

+0

EchoTest.java'線50'的內容添加到您的問題 –

+0

這幾乎看起來像一個競爭條件,與一些其他線程的代碼,你的兩條線之間設置'system'爲null。這是整個'initialize()'方法嗎?每次使用maven運行時都會發生這種情況嗎?如果沒有Maven的情況下由JUnit運行,它會發生嗎? –

回答

3

mvn test -Dtest=EchoTest -DtrimStackTrace=false會給你完整的堆棧跟蹤。

神奇的是-DtrimStackTrace=false

Maven將默認爲斬斷stacktrace下降到只有出現在您的測試線。老實說,這是我第一次沒有注意到這種行爲,這種感覺給我一個非常奇怪的默認(我可以理解爲控制檯輸出,但在surfire的報告XML報告,以及?)

+0

謝謝。那就是訣竅:) –

+0

這真是邪惡。 –

1

你會發現在target/surfire-reports目錄的完整堆棧跟蹤它,文件EchoTest.txt

+0

它沒有。 target/surefire-reports/EchoTest.txt只包含「Test run:4 ElangTest.initialize(EchoTest.java:50)的java.lang.NullPointerException異常」,跟蹤中沒有更多的指示信息也許我設置的很糟糕我的項目 ? –