JUnit(djUnit)でServletをテスト(with MockHttpServletRequest)
前回の覚書の続きっぽい話をば。
まぁ、PlayStation3のPSN障害(クラック問題)で、Apacheとかのhttpd使ってるなら・・・
ここら辺を突破されてしまった訳で(ー”ー;
javax.servlet.http.HttpServlet 継承クラスをJunitでテストするには
HttpServletを継承したクラスをJUnit(djUnit)で自動テストするには、(doPost|doGet)メソッドの引数を理解する必要があるようで。
ていうか、製造いや設計時に理解しておく必要があるようでw←不束者。
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
さて、入力引数のHttpServletRequest、HttpServletResponse・・・。これってインタフェースなんですよね。つまり、これを実装した具象クラスをnewして渡してあげる必要がある。
で、自作する?・・・違う違うw。世の中には既に実装したMockオブジェクトがあるようです。
例えば、Spring Frameworkの場合、こんな便利なクラスがあったりしました。
- MockHttpServletRequest
- MockHttpServletResponse
Spring Framework 3.0.xの場合は前者。後者は、2.5.x。
- org/springframework/mock/webパッケージには、Mock〜始まるクラスが盛りだくさん。
ServletFilter用のMockもありますね。テスト時に助かりそうです。
ってことで、以下のような感じでテスト!
@Test public void testDoPost() { MockHttpServletRequest req = new MockHttpServletRequest(); MockHttpServletResponse resp = new MockHttpServletResponse(); HogeHttpServlet target = new HogeHttpServlet(); try { target.init(); target.doPost(req, resp); target.destroy(); } catch (Exception e) { e.printStackTrace(); fail("Oops!!"); } // 以下略 }
ちなみに、Mock〜を使うには、以下のような名前のJarをclasspath上に追加が必要です。
version | こんなjarが必要 |
3.0.x | org.springframework.test-3.0.5.RELEASE.jar |
2.5.x | spring-mock.jar |
いじょ