Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Menguji Kaedah Menggunakan System.exit() dalam JUnit?

Bagaimanakah Saya Boleh Menguji Kaedah Menggunakan System.exit() dalam JUnit?

Linda Hamilton
Lepaskan: 2024-11-16 05:36:03
asal
473 orang telah melayarinya

How Can I Test Methods Invoking System.exit() in JUnit?

Menguruskan Panggilan System.exit() dalam Ujian Unit

Kaedah ujian yang menggunakan System.exit() menimbulkan cabaran dalam persekitaran JUnit. Apabila System.exit() dipanggil, ia menamatkan Mesin Maya Java (JVM), termasuk proses ujian.

Pendekatan Biasa:

  • Ganti System.exit(): Pertimbangkan untuk menggunakan pustaka ujian yang membenarkan System.exit() menegur atau mengejek. Pendekatan ini memastikan JVM terus berjalan untuk tujuan ujian.
  • Cegah Penamatan JVM: Laksanakan pengurus keselamatan tersuai yang menghalang System.exit() daripada menamatkan JVM. Ini melibatkan menangkap SecurityException yang dilemparkan dengan cuba untuk keluar.
  • Peraturan Sistem JUnit 4.9: Untuk versi JUnit 4.9 dan ke atas, gunakan Peraturan Sistem untuk mengendalikan System.exit() secara khusus dalam ujian unit. Anda boleh mengesahkan bahawa System.exit() dipanggil dan juga menegaskan status keluar.

Contoh Menggunakan NoExitSecurityManager:

Kod Java berikut menunjukkan menggunakan pengurus keselamatan tersuai untuk menghalang penamatan JVM semasa ujian:

public class NoExitTestCase extends TestCase {

    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 testNoExit() throws Exception {
        System.out.println("Printing works");
    }

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

Peraturan Sistem untuk JUnit 4.9 :

JUnit 4.9 dan ke atas menawarkan peraturan sistem yang direka khusus untuk mengendalikan Sistem. keluar(). Contoh berikut menggunakan peraturan ExpectedSystemExit untuk mengesahkan bahawa System.exit() dipanggil dan status keluar:

public class MyTest {

    @Rule
    public final ExpectedSystemExit exit = ExpectedSystemExit.none();

    @Test
    public void noSystemExit() {
        //passes
    }

    @Test
    public void systemExitWithArbitraryStatusCode() {
        exit.expectSystemExit();
        System.exit(0);
    }

    @Test
    public void systemExitWithSelectedStatusCode0() {
        exit.expectSystemExitWithStatus(0);
        System.exit(0);
    }
}
Salin selepas log masuk

Kemas Kini JVM 2023:

Perhatikan bahawa untuk Java 21 dan seterusnya, anda mesti menetapkan sifat sistem -Djava.security.manager=allow untuk menghalang System.exit() daripada menamatkan JVM semasa ujian.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menguji Kaedah Menggunakan 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