web-dev-qa-db-ja.com

sbtとtestngを使用しているときに、テストでスローされた例外の完全なスタックトレースを取得するにはどうすればよいですか?

スタックトレースは切り捨てられます-例えば末尾は[info] ...です

lastを使用したりtraceLevelを変更したりしても効果はありません。単にsbtラッパーの完全なスタックトレースを出力するだけです。

これはtestngでテストしています(また、私はscalatestとsl4jを使用していると思います)

51
wn-

ドキュメントはこちら にあるヒントの使用:

(引用)

Sbtで実行したときに表示される出力は、1)色をオフにする、2)短いスタックトレースを表示する、3)完全なスタックトレースを表示する、4)すべての期間を表示するように構成できます。そのためには、ScalaTestに-o引数を渡し、-oの後に次の組み合わせを配置する必要があります。

  • D-期間を表示
  • S-短いスタックトレースを表示する
  • F-完全なスタックトレースを表示する
  • W-色なし

たとえば、「-oDF」は完全なスタックトレースと期間(各テストに費やされた時間)を表示します。

SbtからScalaTestに引数を渡すには、次のようにテストオプションをグローバルに追加します。

testOptions in Test += Tests.Argument("-oD")

(引用の残りについてはウェブサイトを参照してください)

次のsbtコマンドを使用して、テストで完全なスタックトレースを有効にできます。

> set testOptions in YourProjectName += Tests.Argument("-oF")

Sashaのコメントによれば、これは以下に示すように、テスト実行ごとにコマンドラインから行うこともできます。

$ sbt test -- -oF
57
David

SBTに完全なスタックトレースを出力させる代わりに、try-catchブロックをテストランナーの周りに配置できますか?たとえば、REPLから:

scala> try { throw new Exception } catch { case e => e }
res1: Java.lang.Throwable = Java.lang.Exception

scala> res1.printStackTrace
Java.lang.Exception
    at $line2.$read$$iw$$iw$.liftedTree1$1(<console>:8)
    at $line2.$read$$iw$$iw$.<init>(<console>:8)
    at $line2.$read$$iw$$iw$.<clinit>(<console>)
    ...
4
Kipton Barros