Maison > Java > javaDidacticiel > Comment puis-je donner une seconde chance aux tests JUnit ayant échoué ?

Comment puis-je donner une seconde chance aux tests JUnit ayant échoué ?

Susan Sarandon
Libérer: 2024-10-29 06:35:02
original
970 Les gens l'ont consulté

How Can I Give Failing JUnit Tests a Second Chance to Pass?

Exécuter des tests JUnit ayant échoué pour une seconde chance

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 :

Utiliser une TestRule

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;
            }
        };
    }
}
Copier après la connexion

Dans votre classe de test, appliquez la règle aux tests souhaités :

<code class="java">@Rule
public RetryTestRule retry = new RetryTestRule(3);
Copier après la connexion

Utilisation d'un TestRunner personnalisé

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>
Copier après la connexion

Dans votre classe de test, utilisez le TestRunner personnalisé avec @RunWith :

<code class="java">@RunWith(RetryTestRunner.class)
@Retry(3)
public class MyTestClass {}</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal