category: Java
DATE : 2006/11/16 (Thu)
DATE : 2006/11/16 (Thu)
処理の中で System.out.println などの標準出力への出力を行うメソッドをテストすると、テスト中に出力がコンソールに次々と流れ、テスト結果が埋もれてしまうことがあります。
そこで、標準出力を他の出力ストリームに割り当て直します。
割り当て直すには、java.lang.System#setOut(java.io.PrintStream) を使います。java.io.PrintStream はコンストラクタの一部に java.io.OutputStream をとるものがあります。そこで、OutputStream として java.io.ByteArrayOutputStream を割り当てます。ByteArrayOutputStream は、ストリームに書き込まれたバイト列を byte 配列に書き込む出力ストリームです。他の出力ストリームと比べて手頃なので、このストリームを選択しました。
ByteArrayOutputStream を標準出力に割り当てるコードは次のようになります。
System.setOut(new PrintStream(new ByteArrayOutputStream()));
このコードを、 JUnit の場合は setUp メソッド(もしくは @Before アノテーションの着いたメソッド)に記述すれば、そのテストクラスでの標準出力への出力を抑制することができます。
また、ByteArrayOutputStream オブジェクトを保持しておけば、ByteArrayOutputStream#toString() で出力された文字列を取り出すこともできます。標準出力に出力する文字列もテストする場合は、ByteArrayOutputStream オブジェクトを保持しておくと良いでしょう。
なお、標準エラー出力の場合も同様です。
System.setErr(new PrintStream(new ByteArrayOutputStream()));
PR
●この記事にコメントする
忍者ブログ [PR]