ホームページ > Java > &#&チュートリアル > JUnit で「System.exit()」を呼び出すメソッドをテストする方法

JUnit で「System.exit()」を呼び出すメソッドをテストする方法

Barbara Streisand
リリース: 2024-11-22 10:17:10
オリジナル
714 人が閲覧しました

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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート