5. Filterのテスト
Cactus 5章 Filterのテスト
本章では、Cactusを使用してFilterのテストを行う方法について、説明します。 5.1. FilterRedirectorの設定Filterのテストを行うためには、FilterRedirecterを設定する必要があります。まず、「2.Cactusの構造」を参考に、クラスパスの設定を行ってください。次に、以下の設定ファイルの編集を行います。
まず、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メソッドは省略可能です。 |
![]()
![]()
|