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