Estoy usando JUnit 4.10 para ejecutar suites de prueba, y he implementado una regla de "prueba fallida de reintentar" siguiendo las impresionantes notas de Matthew Farwell en la publicación How to Re-run failed JUnit tests immediately?. He creado una clase "RetryTestRule" con el siguiente código:Cómo aplicar un JUnit @Rule para todos los casos de prueba en un conjunto
public class RetryTestRule implements TestRule {
private final int retryCount;
public RetryTestRule(int retryCount) {
this.retryCount = retryCount;
}
@Override
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;
// retry logic
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;
}
};
}
}
Al utilizar esto como una regla dentro de un caso de prueba que funciona perfectamente, pero no parece óptimo utilizar la notación @Rule en todos los casos de prueba de una suite en vez de una única anotación en la definición suite, por lo que después de revisar un poco probé la nueva notación @ClassRule en mi clase suite:
@RunWith(Suite.class)
@SuiteClasses({
UserRegistrationTest.class,
WebLoginTest.class
})
public class UserSuite {
@ClassRule
public static RetryTestRule retry = new RetryTestRule(2);
}
el problema es que esto no funciona como se esperaba: Error no están siendo juzgados de pruebas . ¿Alguien ha intentado esto y conoce una solución? ¡La ayuda es muy apreciada!
Puede ser un duplicado: http://stackoverflow.com/questions/7639353/how-to-define-junit-method-rule-in-a-suite – pholser
No le preocupa en absoluto que su unidad las pruebas fallan al azar? – Tobb