3

このフォーラムの失敗したJUnitテストをすぐに再実行する方法で失敗した@Testを再実行するためのいくつかの解決策を見つけましたか?。私の場合、コマンドラインからテストを実行します。そして、失敗した場合は完全なテストを再実行したいと思います。以下に私のテストスクリプトテンプレートを示します。失敗した場合は、すべてを(最初から最後まで)再実行したいと思います。

@BeforeClass
public static void Start(){
...
}

@Test
public void Test_One(){
...
}

@Test
public void Test_Two(){
...
}

@AfterClass
public static void End(){
...
}

テストスクリプトが失敗したかどうかをEnd()メソッドで知ることができます。それが失敗した場合、私は次のようなすべてを実行したいと思います

@BeforeClass
@Test (all @Test)
@AfterClass

JUnitで可能ですか?使用しているテンプレートが正しいかどうかわかりません:(

4

3 に答える 3

4

JanakiL、とても良い質問です。解決策を見つけようとしましたが、このタスクのクリーンな解決策を見つけることができませんでした。最終的に機能する回避策を提案することしかできません。したがって、スイートを再実行するには、次の手順を実行する必要があります。

  1. スイート全体を実行するには、@ClassRule を作成する必要があります。次のコードを使用して再試行できるすべてのスイート:

    public class Retrier は TestRule を実装します{

    private int retryCount;
    private int failedAttempt = 0;
        @Override
    public Statement apply(final Statement base,
            final Description description) {
        return new Statement() {
            @Override
            public void evaluate() throws Throwable {               
    
                base.evaluate();                 
                while (retryNeeded()){
                    log.error( description.getDisplayName() + " failed");
                    failedAttempt++;                    
    
                }
    
            }
    

    }

retryNeeded() – 再試行が必要かどうかを判断するメソッド

これにより、スイート内のすべてのテストが再試行されます。@AfterClass メソッドの後に再試行することが非常に重要です。

再試行が成功した後に「環境に優しいビルド」が必要な場合は、別の暗いコードをたくさん書く必要があります。

  1. 失敗した結果の「公開」を許可しない @Rule を作成する必要があります。例として:

public class FailedRule extends TestWatcher {

@Override
public Statement apply(final Statement base, final Description description) {
         return new Statement() {
            @Override
            public void evaluate() throws Throwable {
                List<Throwable> errors = new ArrayList<Throwable>();
                try {

                    base.evaluate();

                } catch (AssumptionViolatedException e) {
                    log.error("", e.getMessage());

                    if (isLastRun()) {
                        throw e;
                    }

                } catch (Throwable t) {
                    log.error("", t.getMessage());                  
                    if (isLastRun()) {
                        throw t;
                    }
                }
            };

        };
}   
}

isLastRun() – 最後に実行されたかどうかを検証し、ir が最後に実行された場合にのみテストに失敗するメソッド。

テストが失敗したことをマークして「赤」をビルドするには、最後の再試行のみを公開する必要があります。3. 最後に、テスト クラスで 2 つのルールを登録する必要があります。

@Rule
public FailedRule ruleExample = new FailedRule ();
@ClassRule 
public static Retrier retrier = new Retrier (3);

Retrier では、再試行の回数を渡すことができます。

誰かがより良い解決策を提案してくれることを願っています!

于 2013-04-10T21:58:53.887 に答える
2

より柔軟な解決策は、カスタム ランナーを作成することです。この回答については、次の投稿で説明しました。

失敗した JUnit テストをすぐに再実行する方法は?

于 2013-12-24T15:08:49.920 に答える
0

Eclipse を使用すると、Junit ビューに [ReRun Tests - Failures First] ボタンがあります。

この回答も参照できます:失敗した JUnit テストをすぐに再実行する方法は?

于 2012-08-08T15:19:09.703 に答える