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アクセスはモックオブジェクトにしたので、あとはシステムテストあたりで消化してください・・・かなぁ。