OutputStreamの内容を読みたい

軽い結合テストレベルでテストパターンが100以上あるのに毎回手でやるんですかf^^;なときにstrutstestcaseで無理やり作ってしまおうという話。


想定としてはこんなかんじの業務アプリ。

・呼出元でパラメータpost
・Actionクラス呼出
・なんかの業務処理
・OutputStreamになにやら出力
・呼出元で受信

問題となるのは、OutputStreamに出力した内容をassertするにはどうすれば・・・ということ。
ここはjava.io.DataOutputStreamというクラスを使う・・・のだろう。

public class HogeTest extends MockStrutsTestCase{
  TestTargetAction target;

  public void testHoge(){
    //出力先ストリーム
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    DataOutputStream oos = new DataOutputStream(bos);

    //strutsテスト用のラッパー
    HttpServletResponseSimulator sim = new HttpServletResponseSimulator();
    sim.setOutputStream(oos);
    HttpServletResponseWrapper wr = new HttpServletResponseWrapper(sim);

    //テスト実行
    target.execute(new ActionMapping(), new HogeForm(), getRequest(), wr);

    //検証
    String expect = (どっかから取得する。)
    assertEquals(expect, new String(bos.toByteArray()));
  ]
}


あとは抽象化とパラメータを外出しにして、テストケース名で取得できるようにすればかなり自動化できるはず。
DBアクセスはモックオブジェクトにしたので、あとはシステムテストあたりで消化してください・・・かなぁ。