Top / Java / Cactus

Cactusとは

CactusとはJ2EEのモジュールのUnitテストを行うためのフレームワークです。 JUnitのクラスを拡張して、コンテナ上でテストを行うためのクラス群を提供します。

具体的には、requestパラメータにいろいろな値をセットしてブラウザのリクエストをシミュレーションすることや、ブラウザへ返却される画面に正しく値がセットされてるかをチェックするクラスなどを提供してくれます。

またCactusで対象としているモジュールははServlet,JSP,Filter などです。

ダウンロード

ここよりダウンロード可能です。 ダウンロードして、サンプルコーディングを作りながら試してみました。

サンプルの説明

今回はサーブレットとフィルタとJSPを使ったモジュールのテストをしようと思います。

01.png

テストのサーブレット(kino.servlet.SampleServlet?)はユーザ入力値を連結して表示するだけの単純なモノです。連結処理を行いJSP(/WEB-INF/index.jsp)に処理を転送します。 フィルタ(kino.filter.RequestEncodingFilter?)はrequest.setCharacterEncoding?()を実行するフィルタです。

サンプルの一部

  • SampleServlet?
    public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    
      String param1 = request.getParameter("param1");
      String param2 = request.getParameter("param2");
    
      // パラメタに値が入ってたら値を連結
      if (param1 != null && param2 != null) {
        String answer = param1 + param2;
        request.setAttribute("answer", answer);
        request.setAttribute("param1", param1);
        request.setAttribute("param2", param2);
      }
    
      sc.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response);
    }
  • index.jsp
    <jsp:useBean id="answer" class="java.lang.String" scope="request" />
    <jsp:useBean id="param1" class="java.lang.String" scope="request" />
    <jsp:useBean id="param2" class="java.lang.String" scope="request" />
    
    <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
    <title>サンプルアプリケーション</title>
    </head>
    <body>
    <p>サンプルアプリケーション</p>
    <form action="<%=request.getContextPath()%>/SampleServlet" method="get">
    <table border="0">
      <tbody>
        <tr>
          <td>param1</td>
          <td><input type="text" name="param1" size="20" value='<%=param1%>' /></td>
        </tr>
        <tr>
          <td>param2</td>
          <td><input type="text" name="param2" size="20" value='<%=param2%>' /></td>
        </tr>
        <tr>
          <td></td>
          <td><input type="submit" name="action" value="実行" /></td>
        </tr>
      </tbody>
    </table>
    <p><%=answer%></p>
    </form>
  • RequestEncodingFilter?
    public void doFilter(
      ServletRequest request,
      ServletResponse response,
      FilterChain chain)
      throws ServletException, IOException {
      request.setCharacterEncoding(encoding);
      chain.doFilter(request, response);
    }

Cactusでテストを行うための準備

jarファイルの配置

WEB-INF/lib ディレクトリに

junit-3.8.1.jar
aspectjrt-1.1.1.jar
cactus-1.6.1.jar
commons-httpclient-2.0.jar
commons-logging-1.0.3.jar

を配置しておきます。

cactus.propertiesの配置

次にクラスパスが通っているディレクトリにcactus.propertiesをおいておきます。 このファイルに記述する内容は

cactus.contextURL=http://localhost:9080/CactusTest

のみでOKです(テスト対象のURL)。

jspRedirector.jspの配置

jspRedirector.jspをルート直下に配置します。

最終的にディレクトリ構成は以下のようになりました。

03.png

web.xmlの編集

Cactusはテスト対象のプログラムを直接呼び出すのではなく、プロクシ(リダイレクタとかいう)を介して

クライアント(テストクラス) -> リダイレクタ -> テストクラス -> テスト対象クラス

という方式でテストを行います。というわけでweb.xmlにリダイレクタとなるサーブレットやフィルタ、JSPなどを登録する必要があります。 登録する内容は

<filter>
  <filter-name>FilterTestRedirector</filter-name>
  <filter-class>org.apache.cactus.server.FilterTestRedirector</filter-class>
</filter>
<filter-mapping>
  <filter-name>FilterTestRedirector</filter-name>
  <url-pattern>/FilterRedirector</url-pattern>
</filter-mapping>
<servlet>
  <servlet-name>ServletTestRedirector</servlet-name>
  <servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class>
</servlet>
<servlet>
  <servlet-name>jspRedirector</servlet-name>
  <jsp-file>/jspRedirector.jsp</jsp-file>
</servlet>
<servlet-mapping>
  <servlet-name>ServletTestRedirector</servlet-name>
  <url-pattern>/ServletRedirector</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>jspRedirector</servlet-name>
  <url-pattern>/JspRedirector</url-pattern>
</servlet-mapping>

などです。

以上で準備は完了です。

ようやくテストクラスの記述

ようやくテストクラスを記述します。

TIPS

リクエストURLを偽造する。

webRequest.setURL("localhost:8080","/[context]","/[ServletName]",null,null);

この記事は

選択肢 投票
おもしろかった 15  
そうでもない 9  
Top / Java / Cactus

現在のアクセス:26453


添付ファイル: file01.png 1897件 [詳細] file03.png 1907件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-01-24 (金) 01:37:09 (1544d)