Dans JUnit, il est possible de configurer les tests pour avoir une seconde chance de réussir lorsqu'ils échouent initialement. Cela peut être particulièrement utile pour les tests qui peuvent échouer par intermittence en raison de facteurs externes, tels que des problèmes de réseau ou des réponses lentes du serveur. Voici deux méthodes pour y parvenir :
Une TestRule vous permet de définir une logique personnalisée à exécuter avant et après chaque méthode de test. Pour créer une TestRule pour réessayer les tests ayant échoué :
<code class="java">public class RetryTestRule implements TestRule { private int retryCount; public RetryTestRule(int retryCount) { this.retryCount = retryCount; } @Override public Statement apply(Statement base, Description description) { return new Statement() { @Override public void evaluate() throws Throwable { Throwable caughtThrowable = null; for (int i = 0; i < retryCount; i++) { try { base.evaluate(); return; } catch (Throwable t) { caughtThrowable = t; } } throw caughtThrowable; } }; } }
Dans votre classe de test, appliquez la règle aux tests souhaités :
<code class="java">@Rule public RetryTestRule retry = new RetryTestRule(3);
Vous pouvez également définir un TestRunner personnalisé qui remplace la méthode runChild() pour contrôler la manière dont chaque méthode de test est exécutée :
<code class="java">public class RetryTestRunner extends BlockJUnit4ClassRunner { private int retryCount; public RetryTestRunner(Class<?> testClass) { super(testClass); Annotation annotation = AnnotationUtils.getAnnotation(testClass, Retry.class); if (annotation != null) { retryCount = ((Retry) annotation).value(); } } @Override protected void runChild(FrameworkMethod method, RunNotifier notifier) { for (int i = 0; i < retryCount; i++) { try { super.runChild(method, notifier); return; } catch (Throwable t) { if (i == retryCount - 1) { throw t; } } } } }</code>
Dans votre classe de test, utilisez le TestRunner personnalisé avec @RunWith :
<code class="java">@RunWith(RetryTestRunner.class) @Retry(3) public class MyTestClass {}</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!