2016-06-23 5 views
0

JUnitのテストケースでアサーションに失敗したメソッドの名前をプログラムで取得する方法はありますか? @TestのAssert.assertTrue(ClassName.methodName)が失敗した場合、アサーションはあるがアサーションに失敗したmethodNameを取得できない@Testメソッドの名前しか取得できません。 それぞれに独自の@BeforeClass、@Before、@Test、@After、および@AfterClassメソッドを持つ300個近くのJUnitテストがあり、アサーションに失敗したメソッド名を記録します。アサーションに失敗したメソッドの名前を取得する方法

+2

これはあなたの質問に対する回答ではありませんが、うまくいけば役立ちます。各テストメソッドに単一のアサーションが含まれるようにテストを書き直すことを検討してください。次に、テストの名前と(失敗した)アサーションを含むメソッドは同じです。このアプローチでは、ここでは範囲外の他の利点も得られます。 –

+0

C-Ottoが書いたことを超えて...単体テストのアイデアは、問題を素早く分離/解決するのに役立つことを覚えておいてください。あなたの設定が非常に複雑で、 "prep/teardown"コードが必要なのかもしれません。もしかしたら、ちょっと戻って、あなたのテストを "改善する"あなたに問題を指摘するのがより良い方法になります。 – GhostCat

+0

実際、私たちは回帰テストシナリオを自動化するためにJUnitを使用しています(!!)我々は既に300以上のシナリオを自動化しており、すべてのテストを高価に書き直しています。
失敗の原因を見つけるためにログファイル全体を調べる必要がないように、失敗したメソッドを具体的に記録することで、テストの失敗を特定する時間を節約したいと考えました。
アサーション失敗のスタックトレースから、私は失敗を含んでいるスクリプトの行を得ることができます。実行可能なjarからそのjavaファイルラインの内容を取得する方法はありますか?私はこれが唯一の選択肢だと感じています。 –

答えて

0

https://github.com/swfsm/junit-fail-loggerをご覧ください。
コンパイル時に、org.junit.Testと注釈されたメソッドをスキャンし、失敗したアサーションをログに記録するためにアサーションをtry catchブロックでラップする注釈プロセッサです。
だから

assertTrue(myMethod("")); 

try { 
    assertTrue(myMethod()); 
} catch (AssertionError e) { 
    System.err.println("assertTrue(myMethod())") 
    throw(e); 
} 
に変換されるロギングのために呼び出されるメソッドは、設定可能であり、(パラメータ値も設定可能である) Stringパラメータを受け入れる任意の静的メソッドであってもよいです。

関連する問題