ホームページ >Java >&#&チュートリアル >JUnit で System.out および System.err 出力をテストする方法

JUnit で System.out および System.err 出力をテストする方法

DDD
DDDオリジナル
2024-12-17 16:31:11147ブラウズ

How to Test System.out and System.err Output in JUnit?

JUnit でのシステム出力のテスト

レガシー システムでは、アプリケーションは明示的にエラーを返す代わりに、エラー メッセージやデバッグ情報を標準出力に出力することがあります。 。このような出力を JUnit でテストするのは難しい場合があります。

問題:

単体テストでは、System.out が発生するケースをキャッチするためにコンソール出力の内容をアサートする方法が必要です。適切なエラーの代わりに println() が使用されます

解決策:

ByteArrayOutputStream と System.setXXX() を使用すると、システム出力をリダイレクトしてキャプチャできるようになります。テスト。

実装:

private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();
private final PrintStream originalOut = System.out;
private final PrintStream originalErr = System.err;

@Before
public void setUpStreams() {
    System.setOut(new PrintStream(outContent));
    System.setErr(new PrintStream(errContent));
}

@After
public void restoreStreams() {
    System.setOut(originalOut);
    System.setErr(originalErr);
}

テスト ケース:

@Test
public void out() {
    System.out.print("hello");
    assertEquals("hello", outContent.toString());
}

@Test
public void err() {
    System.err.print("hello again");
    assertEquals("hello again", errContent.toString());
}

注:

この回答の以前のバージョンテスト後に System.setOut(null) が呼び出されます。これが、コメント投稿者が言及した NullPointerExceptions の原因です。

以上がJUnit で System.out および System.err 出力をテストする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。