Réessayer les tests JUnit ayant échoué avec une règle de nouvelle tentative
Les tests JUnit peuvent parfois échouer en raison de retards inattendus dans le système testé. Pour atténuer de tels échecs, vous pouvez utiliser une règle de nouvelle tentative pour donner une seconde chance aux tests ayant échoué.
Pour implémenter une règle de nouvelle tentative, créez une règle personnalisée en étendant la règle. La méthode apply() définira la logique autour du test, y compris la boucle de nouvelle tentative :
<code class="java">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; // Retry loop 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; } }; } }</code>
Appliquez la règle de nouvelle tentative à votre scénario de test en utilisant @Rule :
<code class="java">public class RetryTest { @Rule public Retry retry = new Retry(3); // Test methods... }</code>
À l'aide d'un TestRunner personnalisé
Vous pouvez également créer un TestRunner personnalisé qui étend BlockJUnit4ClassRunner et remplace la méthode runChild() pour inclure une logique de nouvelle tentative. Cette méthode remplace la façon dont les méthodes de test individuelles sont exécutées.
Conclusion
En utilisant une règle de nouvelle tentative ou un TestRunner personnalisé, vous pouvez améliorer vos tests JUnit pour gérer les échecs temporaires et garantir la fiabilité des tests même dans des conditions exigeantes.
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!