Rumah >Java >javaTutorial >Bagaimana untuk Menguji Kaedah yang Memanggil `System.exit()` dalam 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); } } }
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!