2013-03-05 9 views
6

なぜテストメソッドの名前が他のテストに影響する可能性がありますか?メソッド名のためにJUnitテストが失敗する

2つのクラスのテストがあり、class1のメソッド名を変更すると、class2のテストはok(緑色)になります。

私は、両方のクラスが同じ名前のメソッドを持っていることに気付きましたが、失敗したテストはこれらのどちらでもありません。しかし、それらの名前を変更すると、すべてのテストは正常です。

同じクラスの同じ名前の2つのメソッドを同じスイート内に置いても構いませんか?そして、ランダムに別のテストが失敗するという事実はちょうど偶然でしょうか?

ps:実行されたテストの順序は、そのメソッドの名前を変更すると変更されます。 ps2:私の悪い英語を申し訳ありません。 enter image description here

+11

実際にどのような順序で実行されるようにテストがうまく設計されていますか?実行する順序に依存する可能性のある状態はありますか? – vikingsteve

+6

問題はおそらく実行の順序であり、テストの名前ではありません。テストの1つ(または多く)が、他のテストの状態を変更する可能性があります。 –

+1

テスト分離の失敗は、テストが別のテストの副作用に依存しているため、特定の順序で実行する必要があるときに呼び出されるため、嫌になります。 –

答えて

7

のJUnitにはバグがありません:

それ絵は私の質問をよりよく説明することができます!私たちのチームは、不適切なリソース管理によって引き起こされた同様の結果を経験しました。失敗したテストの名前を変更して、最初に実行されるようにすることができます。彼らは今、緑色に変わるはずです。それは、主にリソースがテスト間で偶然に共有されているという兆候です。その場合は、解凍したリソースを解放しようとすることができます(@After)。 原因を見つけるための少しのチェックリストです:

  • テストに耐えられるスレッドはありますか?
  • すべてのエグゼキュータはシャットダウンして終了しますか?
  • テスト後もファイルまたはストリームが開いていますか?
  • テスト後にテストクラスのすべてのフィールドがクリア/再初期化されていますか?
  • 静的リファレンスまたはシングルトンの使用を避ける
  • テスト方法でリソースを解放しないでください。それ以外の場合、例外により、このコードが到達不能になる可能性があります。
関連する問題