0
1

More than 1 year has passed since last update.

JUnitテストで標準出力/標準エラー出力の内容をテストするためのサンプルコード

Posted at

テスト対象のコード

public class Sample {
    public static void main(String[] args) {
        if (args.length == 1){
            System.out.println("引数は" + args[0] + "です。");
        } else {
            System.err.println("引数を1つ指定してください。");
        }
    }
}

テストコード

public class SampleTest {

    @Test
    public void test() {
        // 標準出力のデフォルトの出力先
        PrintStream defaultPrintStream = System.out;
        // 標準エラー出力のデフォルトの出力先
        PrintStream defaultErrorPrintStream = System.err;

        // 出力先を変更
        ByteArrayOutputStream stdOut = new ByteArrayOutputStream();
        ByteArrayOutputStream errOut = new ByteArrayOutputStream();
        System.setOut(new PrintStream(stdOut));
        System.setErr(new PrintStream(errOut));

        // 改行コードを取得
        String lineSeparator = System.getProperty("line.separator");

        // 標準出力の内容をテスト(1)
        Sample.main(new String[]{"test1"});
        assertEquals("引数はtest1です。" + lineSeparator, stdOut.toString());

        // 出力内容をリセット
        stdOut.reset();

        // 標準出力の内容をテスト(2)
        Sample.main(new String[]{"test2"});
        assertEquals("引数はtest2です。" + lineSeparator, stdOut.toString());

        // 標準エラー出力の内容をテスト
        Sample.main(new String[]{});
        assertEquals("引数を1つ指定してください。" + lineSeparator, errOut.toString());

        // 出力先を戻す
        System.setOut(defaultPrintStream);
        System.setErr(defaultErrorPrintStream);
    }
}

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1