assert ステートメントが成功するたびに大声で叫ぶか、少なくとも、遭遇した成功した assert ステートメントの数を表示するようにしたいと思います。
JUnit4を使用しています。
助言がありますか?
成功したアサーションごとに出力を確認したい場合は、外部の依存関係やソースコードを必要としない別の簡単なアプローチとして、すべてのメソッドを標準のJUnit Assertクラスに委任する独自のAssertクラスを定義し、成功したアサーションをログに記録します(失敗したアサーションは、通常どおりJUnitクラスによって報告されます)。
次に、「org.junit.Assert」=>「com.myco.test.Assert」からテストクラスでグローバル検索と置換を実行します。これにより、すべての通常の静的インポートステートメントが修正されます。
次に、アプローチをquieter-is-better-campに簡単に移行し、ラッパークラスを変更して、テストごとまたはクラスごとなどに合格したアサーションの総数を報告することもできます。
JUnit をより冗長にしたいときに役立つ情報を追加し、この質問に出くわしました。将来、他のテスターに役立つかもしれません。
Ant から JUnit を実行していて、実行中のテストを確認したい場合は、タスクに以下を追加できます。
<junit showoutput="true" printsummary="on" enabletestlistenerevents="true" fork="@{fork}" forkmode="once" haltonfailure="no" timeout="1800000">
他のタスク属性ではなく、showoutput、printsummary、および enabletestlistenerevents が役に立ったことに注意してください。これらを設定すると、次のような出力が得られます。
Running com.foo.bar.MyTest
junit.framework.TestListener: tests to run: 2
junit.framework.TestListener: startTest(myTestOne)
junit.framework.TestListener: endTest(myTestOne)
junit.framework.TestListener: startTest(myTestTwo)
junit.framework.TestListener: endTest(myTestTwo)
Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.495 sec
これは、テストがタイムアウトし、実際に時間がかかりすぎているテストや、時間切れになったときに実行できなかったためにキャンセルされたテストがわからないときに役立ちました。
AOP (Spring または AspectJ を使用) を使用して、junit.framework.Assert クラスのすべての assert メソッドでポイントカットを定義できます。spring を使用すると、呼び出されるだけのアドバイス ( http://static.springframework.org/spring/docs/2.5.x/reference/aop.html#aop-advice-after-returning )を返した後に独自のクラスを実装できます。 assert メソッドが渡された場合 (そうでない場合、例外がスローされます: junit.framework.AssertionFailedError )。自分のクラスでは、単純なカウンターを実装して最後に出力できます。
成功するアサーションに本当に興味がありますか? 通常、興味深いアサーションは失敗するものだけです。
私自身、熱烈な JUnit 信奉者であるため、テストの出力をできるだけ静かにするようにしています。最良のテスト実行は、すべてが成功し、stdout からのぞき見がないものです。
単体テストが成功するまでいつでも作業して、「grep Assert test.java | wc -l」を実行できます。:-)
やりにくい。すべての assert メソッドはクラス Assert の静的メンバーです。これは、RunNotifier (成功したテストと失敗したテストをカウントする) が手の届かないところにあることを意味します。
醜いハックを控えない場合: JUnit からソースを取得し、パッチを適用して、静的メソッドが成功したアサートをこのノーティファイアーに報告できるようにテストを実行するときに、Assert の静的フィールドに現在のノーティファイアーを格納します。
一致したアサーションをカウントしたり、より詳細な情報を出力したりすることがJUnitの目標だとは思いません。テストがアトミックであれば、そこからほとんどの情報を取得できます。だから私は自分のテストを見直します。
JUnit で LogFile を確立することもできます。可能ですが、テスト実行のパフォーマンスが低下します...
それを行うカスタム TestRunner を作成できると確信しています。自作の単体テスト フレームワーク (NUnit のクローン) で同様の結果が得られました。
ああ、待ってください。あなたの質問をもう一度読んでいます。成功した各アサーションの出力が本当に必要な場合は、配管をさらに掘り下げる必要があります。TestRunner は、テストケースの開始/終了ごとに 1 回だけ呼び出されるため、アサーションではなく、成功したテストと失敗したテストをカウントします。
私は通常、テストごとに 1 つのアサーションを行う傾向があるため、これは私にとって大きな問題ではありません。
ご検討いただけますか?
1) junit ソースをダウンロード
する 2) クラス org.junit.Assert を変更して、探している変更を行う
残念ながら、junit の javadoc には、失敗したアサーションのみが記録されると書かれています ( http://junit.sourceforge.net/javadoc_40/index.html )
だからそれは不可能だと思われる