Heim > Java > javaLernprogramm > Wie können Sie einen Wiederholungsmechanismus für fehlgeschlagene JUnit-Tests implementieren, um die Stabilität der Testsuite zu verbessern?

Wie können Sie einen Wiederholungsmechanismus für fehlgeschlagene JUnit-Tests implementieren, um die Stabilität der Testsuite zu verbessern?

DDD
Freigeben: 2024-10-29 13:29:02
Original
897 Leute haben es durchsucht

How can you implement a re-run mechanism for failed JUnit tests to improve test suite stability?

Ausführen fehlgeschlagener JUnit-Tests: Eine Lösung zur erneuten Ausführung

Die sofortige erneute Ausführung fehlgeschlagener JUnit-Tests kann die Stabilität automatisierter Testsuiten verbessern. insbesondere wenn es um zeitweilige Ausfälle geht. In diesem Artikel werden zwei Ansätze zur Implementierung eines solchen Mechanismus untersucht.

1. Verwendung einer TestRule

Eine TestRule bietet eine flexible Möglichkeit, den Testausführungsablauf zu ändern. Um Wiederholungen mithilfe einer Testregel zu implementieren, definieren Sie Folgendes:

<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;
            }
        };
    }
}
Nach dem Login kopieren

Kommentieren Sie Tests, die Wiederholungen erfordern, mit der Wiederholungsregel:

<code class="java">@Rule
public Retry retry = new Retry(3);

@Test
public void test1() {
}
Nach dem Login kopieren

2. Erstellen eines benutzerdefinierten TestRunner

Alternativ kann ein benutzerdefinierter TestRunner definiert werden, um Testwiederholungen für eine bestimmte Suite durchzuführen. Erweitern Sie BlockJUnit4ClassRunner und überschreiben Sie die runChild()-Methode:

<code class="java">public class CustomTestRunner extends BlockJUnit4ClassRunner {

    private int retryCount;

    public CustomTestRunner(Class<?> testClass) {
        super(testClass);
    }

    @Override
    protected void runChild(final FrameworkMethod method, RunNotifier notifier) {
        for (int i = 0; i < retryCount; i++) {
            try {
                super.runChild(method, notifier);
                return;
            } catch (Throwable t) {
                System.err.println(method.getName() + ": run " + (i+1) + " failed");
            }
        }
        System.err.println(method.getName() + ": giving up after " + retryCount + " failures");
        throw new RuntimeException();
    }
}</code>
Nach dem Login kopieren

Fügen Sie die TestRunner-Annotation zur Suite-Klasse hinzu:

<code class="java">@RunWith(CustomTestRunner.class)
public class TestSuite {

    @BeforeClass
    public static void setUp() { ... }

    @AfterClass
    public static void tearDown() { ... }

    @Test
    public void test1() { ... }

    @Test
    public void test2() { ... }
}</code>
Nach dem Login kopieren

Beide Ansätze ermöglichen eine flexible Kontrolle über Testwiederholungen und bieten eine wertvoller Mechanismus zur Behandlung zeitweiliger Fehler in JUnit-Tests.

Das obige ist der detaillierte Inhalt vonWie können Sie einen Wiederholungsmechanismus für fehlgeschlagene JUnit-Tests implementieren, um die Stabilität der Testsuite zu verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage