簡単なサーブレットのテスト
たとえばこんな、すごく単純なサーブレット
public void doGet(HttpServletRequest request, HttpServletResponse response) { response.setStatus(200); }
200 OKを返すだけの、本当に単純なサーブレット
流石にここまで単純なのはないけど、あくまで例として。
こんな、単純なものでも試験はせにゃならないわけで
そのためだけに、EasyMockとかわざわざ入れるのもどうかと思った。
じゃあ、自前で実装すればいいじゃない
やりたいことは、setStatus(int)だけなのだから
public MockHttpServletResponse implements HttpServletResponse { private int status; @Override public void setStatus(int i) { this.status = i; } // 試験用(ステータスコードを取得) public int getStatus() { return status; } //以下盛大に省略 }
これだけの実装をしたモックさんを用意して
MockHttpServletRequest mockResponse = new MockHttpServletRequest(); testServlet.doGet(null, mockResponse); int status = mockResponse.getStatus();
こうやってやれば、statusに何セットしたかどうかわかるよねっ!
これだけなら、非常に簡単なお話だったのだけど、
テストしたかったサーブレットはこんなこともやってた。
public void doGet(HttpServletRequest request, HttpServletResponse response) { PrintWriter out = response.getWriter(); out.print("<html></html>"); // 中略 response.setStatus(200); }
PrintWriter#printとかちょっと詰んだ気しかしない。
でも、ちょっと頑張ってみたら、意外と簡単に何とかなった。
というわけで、実装追加したモックさん。
public MockHttpServletResponse implements HttpServletResponse { private int status; StringWriter stringWriter = new StringWriter(); @Override public void setStatus(int i) { this.status = i; } // 試験用(ステータスコードを取得) public int getStatus() { return status; } @Override public void getPrintWriter() { return new PrintWriter(stringWriter); } // 試験用(PrintWriterで出力した文字列を取得) public String getPrintWritedString() { return stringWriter.toString(); } //以下やっぱり盛大に省略 }
これくらいの実装なら、自分で書いちゃったほうが早いよね。多分。
Eclipseなら必要なメソッドはreturn nullとかで適当に実装してくれちゃうし。
今回は初回だったんで時間かかったけど。