Rumah > Java > javaTutorial > Bagaimanakah anda boleh melaksanakan mekanisme jalankan semula untuk ujian JUnit yang gagal untuk meningkatkan kestabilan suite ujian?

Bagaimanakah anda boleh melaksanakan mekanisme jalankan semula untuk ujian JUnit yang gagal untuk meningkatkan kestabilan suite ujian?

DDD
Lepaskan: 2024-10-29 13:29:02
asal
897 orang telah melayarinya

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

Menjalankan Ujian JUnit yang Gagal: Penyelesaian Jalankan Semula

Menjalankan semula ujian JUnit yang gagal serta-merta boleh meningkatkan kestabilan suite ujian automatik, terutamanya apabila berhadapan dengan kegagalan yang terputus-putus. Artikel ini meneroka dua pendekatan untuk melaksanakan mekanisme sedemikian.

1. Menggunakan TestRule

A TestRule menyediakan cara yang fleksibel untuk mengubah suai aliran pelaksanaan ujian. Untuk melaksanakan larian semula menggunakan TestRule, takrifkan:

<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;
            }
        };
    }
}
Salin selepas log masuk

Anotasi ujian yang memerlukan percubaan semula dengan peraturan Cuba Semula:

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

@Test
public void test1() {
}
Salin selepas log masuk

2. Mencipta TestRunner Tersuai

Sebagai alternatif, TestRunner tersuai boleh ditakrifkan untuk mengendalikan larian semula ujian untuk suite tertentu. Panjangkan BlockJUnit4ClassRunner dan ganti kaedah runChild():

<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>
Salin selepas log masuk

Tambah anotasi TestRunner pada kelas suite:

<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>
Salin selepas log masuk

Kedua-dua pendekatan membenarkan kawalan fleksibel ke atas ujian dijalankan semula, menyediakan mekanisme berharga untuk mengendalikan kegagalan terputus-putus dalam ujian JUnit.

Atas ialah kandungan terperinci Bagaimanakah anda boleh melaksanakan mekanisme jalankan semula untuk ujian JUnit yang gagal untuk meningkatkan kestabilan suite ujian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan