Rumah > Java > javaTutorial > Bagaimana untuk Menguji Kaedah yang Memanggil `System.exit()` dalam JUnit?

Bagaimana untuk Menguji Kaedah yang Memanggil `System.exit()` dalam JUnit?

Barbara Streisand
Lepaskan: 2024-11-22 10:17:10
asal
739 orang telah melayarinya

How to Test Methods that Call `System.exit()` in JUnit?

Bagaimana untuk Menguji Kaedah yang Memanggil System.exit()?

Isu:

Kaedah ujian yang memanggil System.exit() boleh mencabar kerana JUnit ditamatkan apabila System.exit() digunakan.

Penyelesaian:

Terdapat beberapa pendekatan untuk menangani isu ini:

1. Elakkan Menggunakan System.exit():

Daripada menggunakan System.exit(), pertimbangkan untuk menaikkan pengecualian yang tidak ditandai. Ini membolehkan JUnit menangkap pengecualian dan melaporkan kegagalan ujian tanpa menamatkan JVM.

2. Cegah System.exit() daripada Keluar dari JVM:

Gunakan pengurus keselamatan yang menghalang panggilan ke System.exit(). Ini boleh dicapai dengan mencipta kelas pengurus keselamatan tersuai dan mengubah suai kes ujian untuk dijalankan dengannya.

3. Gunakan Peraturan Sistem (JUnit 4.9 ):

Gunakan peraturan ExpectedSystemExit untuk mengesahkan bahawa System.exit() dipanggil dan menguji status keluar. Peraturan ini menyediakan cara yang mudah untuk mengendalikan System.exit() dalam ujian.

4. Tetapkan Harta Sistem (Java 21 ):

Untuk mengelakkan JVM daripada ditamatkan disebabkan oleh System.exit(), tetapkan sifat sistem -Djava.security.manager=allow.

Contoh Kod Menggunakan Pengurus Keselamatan:

public class NoExitTestCase extends TestCase {

    protected static class ExitException extends SecurityException {
        public final int status;
        public ExitException(int status) {
            super("There is no escape!");
            this.status = status;
        }
    }

    private static class NoExitSecurityManager extends SecurityManager {
        @Override
        public void checkExit(int status) {
            super.checkExit(status);
            throw new ExitException(status);
        }
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        System.setSecurityManager(new NoExitSecurityManager());
    }

    @Override
    protected void tearDown() throws Exception {
        System.setSecurityManager(null);
        super.tearDown();
    }

    public void testExit() throws Exception {
        try {
            System.exit(42);
        } catch (ExitException e) {
            assertEquals("Exit status", 42, e.status);
        }
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menguji Kaedah yang Memanggil `System.exit()` dalam JUnit?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan