Webアプリ開発エンジニアのための技術情報サイト「テックスコア」

3. Servletのテスト

本章では、Cactusを使用してServletのテストを行う方法について、説明します。

3.1. ServletTestCase

それでは、Cactusを使用してサーブレットのテストクラスを記述してみましょう。以下は、SampleServletのコードです。

 1:import javax.servlet.*;
2: 3:... 4:public class SampleServlet extends HttpServlet 5:{ 6: 7: public void doGet(HttpServletRequest theRequest,
8: HttpServletResponse theResponse) throws IOException{
9: PrintWriter pw = theResponse.getWriter(); 10: theResponse.setContentType("text/html"); 11: String test=theRequest.getParameter("test"); 12: pw.print("<html><head/><body>A GET request:"+test+"</body></html>"); 13: }

SampleServletでは、getで送信されたパラメータの値を取得し、表示します。以下がSampleServletのテストクラスの例です。


 1:import org.apache.cactus.*;
2:import junit.framework.*;
3:... 4:public class TestSampleServlet extends ServletTestCase 5:{ 6: String test="CactusTest"; 7: public TestSampleServlet(String theName) 8: { 9: super(theName); 10: } 11: 12:  public void beginShowTest(WebRequest request) 13: { 14: request.addParameter("test", test); 15: } 16: 17: public void testShowTest() throws IOException 18: { 19: SampleServlet servlet = new SampleServlet(); 20: servlet.doGet(request, response); 21: } 22: 23: 24: public void endShowTest(WebResponse theResponse) 25: throws IOException 26: { 27: String expected = "<html><head/><body>A GET request:"+test+"</body></html>"; 28: String result = theResponse.getText(); 29: assertEquals(expected, result); 30: } 31: 32: }

1、2行目でCactusに必要な、org.apache.cactusおよびjunit.frameworkをインポートします。サーブレットのテストクラスは、ServletTestCaseを拡張して作成します。7-10行目でコンストラクタを設定しています。ServletTestCaseはjunit.framework.TestCaseを拡張しているので、コンストラクタはString引数を一つ取るものとなります。

3.2. Testのメソッド

サーブレットに限らず、サーバサイドJavaのテストプログラムには、以下の処理を記述します。

  • サーバに送るHTTPRequestに値をセットする
  • サーバサイドプログラムを実行する
  • 返されたHTTPResponseの値を評価する。

この3つの処理はそれぞれ、beginXXX、testXXX、endXXXというメソッドに記述します。"XXX"の部分が共通です。通常、一つのテストクラスには、複数のテストが記述されていますが、TestRunnerは"XXX"の部分が共通のメソッドを一グループとして、begin->test->endの順で実行します。

例えば、Cactusを使用せずにSampleServletのテストを行う場合、以下の手順で行うと思います。

  1. SampleServletに、GETメソッドでtestパラメータとその値を送信する。
  2. (サーブレットエンジンが)SampleServletはHTTP GETリクエストをうけ、doGetメソッドを実行する。
  3. doGetメソッドより返されたHTTP レスポンスブラウザなどで表示し、意図した結果が得られているか、確認する。

CactusでSampleServletのテストを行う際は、1.の処理をbeginメソッドに、2.の処理をtestメソッドに、3.の処理をendメソッドに記述します。

なお、beginメソッドとendメソッドは必須メソッドではありません。requestに特に何も設定しない場合や、テスト結果の評価をtestメソッド内で行うことが可能な場合は、beginメソッド、endメソッドは必要ありません。



前のページへ TECHSCOREのTOPページへ 次のページへ
TECHSCORE PR
PR
PR
PR
PR
PR

techscore(トップページへ)
TECHSCORE書店
TECHSCOREトップページJavaSQLXMLリッチクライアントモデリングセマンティックWebその他技術Tuigwaa