JUnitでSystem.out.println()をテスト

処理結果がSystem.outされるメソッドをテストするにはどうしたらよいでしょうか。出力された結果の目視確認ではJUnitでの自動テストにはなりません。そんなときは、下記のようにテストケースを実装すると良いと思います。

private final ByteArrayOutputStream out = new ByteArrayOutputStream();

@Before public void before() {
    System.setOut(out);
}
@After public void after() {
    System.setOut(null);
}
@Test public void testCalc() {
    Calc calc = new Calc();
    calc.add(1, 3); // 1 + 3 の結果をSystem.outしているメソッド
    Assert.assertThat(out.toString(), Is.is("4"));
}

このように実装することにより、System.outされた結果を検証することができます。