同じJUnitテストを何度も実行する簡単な方法は?質問する

同じJUnitテストを何度も実行する簡単な方法は?質問する

タイトルにあるように、Eclipse を使用して JUnit 4.x テストを連続して自動的に複数回実行する簡単な方法を探しています。

たとえば、同じテストを 10 回連続で実行し、結果を報告するなどです。

これを行う複雑な方法は既にありますが、私が修正しようとしていた不安定なテストが修正されたままであることをある程度確信できるように、これを行う簡単な方法を探しています。

理想的な解決策は、私が知らない Eclipse プラグイン/設定/機能です。

ベストアンサー1

これを行う最も簡単な方法 (必要な新しいコードの量が最も少ない) は、テストをパラメーター化されたテストとして実行することです ( で注釈を付け@RunWith(Parameterized.class)、10 個の空のパラメーターを提供するメソッドを追加します)。この方法では、フレームワークはテストを 10 回実行します。

このテストはクラス内の唯一のテストである必要があります。または、すべてのテスト メソッドをクラス内で 10 回実行する必要があります。

次に例を示します。

@RunWith(Parameterized.class)
public class RunTenTimes {

    @Parameterized.Parameters
    public static Object[][] data() {
        return new Object[10][0];
    }

    public RunTenTimes() {
    }

    @Test
    public void runsTenTimes() {
        System.out.println("run");
    }
}

上記では、パラメータなしのコンストラクターで実行することも可能ですが、フレームワークの作成者がそれを意図していたのか、将来的にそれが機能しなくなるのかはわかりません。

独自のランナーを実装している場合は、ランナーにテストを 10 回実行させることができます。サードパーティのランナーを使用している場合は、4.7 で新しいアノテーションを使用して、ステートメントを取得して for ループで 10 回実行するようにインターフェイス@Ruleを実装できます。このアプローチの現在の欠点は、およびが1 回しか実行されないことです。これは、JUnit の次のバージョンで変更される可能性があります (は の後に実行されます)。ただし、いずれにしても、オブジェクトの同じインスタンスに対して操作することになります (ランナーの場合はそうではありません)。これは、クラスを実行しているランナーがアノテーションを正しく認識することを前提としています。これは、JUnit ランナーに委任している場合のみです。MethodRule@Before@After@Before@RuleParameterized@Rule

アノテーションを認識しないカスタム ランナーで実行している場合は@Rule、そのランナーに適切に委任して 10 回実行する独自のランナーを作成する必要があります。

これを解決する方法は他にもあることに注意してください (Theories ランナーなど) が、それらはすべてランナーが必要です。残念ながら、JUnit は現在、ランナーのレイヤーをサポートしていません。これは、他のランナーを連鎖させるランナーです。

おすすめ記事