System.exit() を呼び出すメソッドをテストする方法?
問題:
System.exit() を呼び出すメソッドのテストは、次の場合に JUnit が終了するため、困難になる可能性があります。 System.exit() が呼び出されます。
解決策:
この問題に対処するには、いくつかの方法があります。
1. System.exit() の使用を避ける:
System.exit() を使用する代わりに、未チェック例外を発生させることを検討してください。これにより、JUnit は JVM を終了せずに例外をキャッチし、テストの失敗を報告できるようになります。
2. System.exit() が JVM を終了しないようにします:
System.exit() への呼び出しを防止するセキュリティ マネージャーを採用します。これは、カスタム セキュリティ マネージャー クラスを作成し、それを使用して実行するようにテスト ケースを変更することで実現できます。
3.システム ルールを使用します (JUnit 4.9 ):
ExpectedSystemExit ルールを使用して、System.exit() が呼び出されることを確認し、終了ステータスをテストします。このルールは、テストで System.exit() を処理する便利な方法を提供します。
4.システム プロパティの設定 (Java 21 ):
System.exit() による JVM の終了を防ぐには、システム プロパティ -Djava.security.manager=allow.
を設定します。 セキュリティマネージャーを使用したコード例:
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); } } }
以上がJUnit で「System.exit()」を呼び出すメソッドをテストする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。