2011-08-23 61 views
5

上下文:在由SBT管理的項目中編寫Scala單元測試。使用Scala從SBT獲取堆棧跟蹤

當我執行sbt test運行我的單元測試的斷言在我的代碼某處出現故障時,我得到類似如下(僅此而已):

Test com.reach.ml.test.TestLSHEasy.T0 failed: assertion failed 

這告訴我哪個單元測試引起斷言失敗,但不是斷言它是。如果我直接運行相同的測試(不使用sbt),我會得到一個完整的堆棧跟蹤,這對調試非常有用。所以我的問題是:如何在測試崩潰時讓SBT打印堆棧跟蹤?

+0

「最後測試」是否顯示測試執行的所有輸出? – Geo

+0

不,整個測試相關的輸出,當工作是: 「」「 [信息]通過::共9,失敗0,錯誤0,通過9,跳過0 [成功]總時間:9秒,已完成2011年8月22日下午11:33:29 PM 「」「」 如果有錯誤,只是我第一次發佈的行和另一個說基本上相同的事情。 – emchristiansen

+0

Geo的含義是,當'test'在SBT上失敗並且沒有輸入'last test'時會顯示完整的異常? –

回答

2

關於xsbt,它可能與可以修剪其輸出的util.log.StackTrace對象有關。
issue 118所示保持堆棧跟蹤應該是更好的控制之下的意願:

所以你不應該看到,跟蹤默認。

也許你可以用你的單元測試,攔截任何異常,並明確地打印他們的堆棧跟蹤? (如在Basic.scalaBoot.scala中)。

+1

謝謝。看起來開發人員在嘗試清理錯誤打印時有點過度。在任何情況下,SBT都是一個很好的工具,並且使用try/catch塊封裝,雖然不理想,但並不難。 – emchristiansen