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

5. Filterのテスト

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

5.1. FilterRedirectorの設定

Filterのテストを行うためには、FilterRedirecterを設定する必要があります。まず、「2.Cactusの構造」を参考に、クラスパスの設定を行ってください。次に、以下の設定ファイルの編集を行います。

  1. サーバ側:web.xmlを編集する。
  2. クライアント側:cactus.propertiesを編集し、サーバに設定したFilterRedirectorを参照する

まず、web.xmlの編集です。

  9:      <filter>
 10:          <filter-name>FilterRedirector</filter-name>
 11:          <filter-class>org.apache.cactus.server.FilterTestRedirector</filter-class>
 12:      </filter>
 13:  
 14:      <filter-mapping>
 15:          <filter-name>FilterRedirector</filter-name>
 16:          <url-pattern>/FilterRedirector</url-pattern>
 17:      </filter-mapping> 

以上のように、org.apache.cactus.server.FilterTestRedirectorフィルターを設定します。フィルターネームや、URLマッピングは任意のものを指定して構いません。次に、cactus.propertiesを編集します。以下の記述を追加します。

 cactus.filterRedirectorName = FilterRedirector

"="の後ろには、web.xmlで指定したURLパターンを記述します。これで設定完了です。

5.2. FilterTestCase

それでは、Cactusを使用してFilterのテストクラスを記述してみましょう。以下は、「サーブレット6章」で例としてあげられた、文字コードの変換を行うフィルターのコードです。

1: import javax.servlet.*;
2: import java.io.IOException;
3:   
4: public final class EncodingFilter implements Filter{
5:   private String encoding=null;
6:   public void init(FilterConfig config) throws ServletException{
7:     encoding=config.getInitParameter("encoding");
8:   }
9:   
10:  public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
11:    throws ServletException,IOException{
12:    request.setCharacterEncoding(encoding);
13:    chain.doFilter(request,response);
14:  }
15:  
16:  public void destroy(){
17:    encoding=null;
18:  }
19:} 
以下がEncodingFilterのテストクラスの例です。
 1: import org.apache.cactus.*;
 2: import junit.framework.*;
 3: ...
 4: public class EncodingFilterTest extends FilterTestCase
 5: {
 6: 
 7: private static String ENCODING="EUC_JP";
 8: 
 9: public EncodingFilterTest(String name){
10: 	super(name);
11: }
12: 
13: public void testEncode() throws ServletException, IOException
14: {
15:     EncodingFilter filter = new EncodingFilter();
16:     config.setInitParameter("encoding",ENCODING );
17:     filter.init(config);
18:     filter.doFilter(request, response, filterChain);
19:   assertEquals(ENCODING,request.getCharacterEncoding());   
20: }

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

また、サーブレットのテストと同様に、beginメソッドでHTTPRequestの設定、testメソッドでサーバサイドプログラムの実行(ここでは、フィルターの実行)、endメソッドでResponseの評価を行います。場合によっては、begin、endメソッドは省略可能です。



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

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