Is there a way to get Gradles JUnit test action to re-try failed tests once?


(Jon Austen) #1

Is there a way to get JUnit test action to re-try failed tests once?

I was thinking of something along the lines of creating a JUnit TestRule .

Here is an example of a Retry TestRule :

public class RetryTest {
    public class Retry implements TestRule {
        private int retryCount;
          public Retry(int retryCount) {
            this.retryCount = retryCount;
        }
          public Statement apply(Statement base, Description description) {
            return statement(base, description);
        }
          private Statement statement(final Statement base, final Description description) {
            return new Statement() {
                @Override
                public void evaluate() throws Throwable {
                    Throwable caughtThrowable = null;
                      // implement retry logic here
                    for (int i = 0; i < retryCount; i++) {
                        try {
                            base.evaluate();
                            return;
                        } catch (Throwable t) {
                            caughtThrowable = t;
                            System.err.println(description.getDisplayName() + ": run " + (i+1) + " failed");
                        }
                    }
                    System.err.println(description.getDisplayName() + ": giving up after " + retryCount + " failures");
                    throw caughtThrowable;
                }
            };
        }
    }
      @Rule
    public Retry retry = new Retry(3);
      @Test
    public void test1() {
    }
      @Test
    public void test2() {
        Object o = null;
        o.equals("foo");
    }
}

This question has similarities to this question, but is not the same question: http://forums.gradle.org/gradle/topics/testng_rerun_failed_tests


(Peter Niederwieser) #2

It’s not something that JUnit/Gradle provides out-of-the-box. Of course, you can always use a test rule.