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

6. JSPのテスト

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

6.1. JspRedirectorの設定

JSPのテストを行うためには、JspRedirecterを設定する必要があります。まず、「2.Cactusの構造」を参考に、クラスパスの設定を行ってください。次に、JspRedirectorをサーバ側に配置します。JspRedirectorはjspRedirector.jspという名前のJSPファイルで、Cactus配布パッケージのWebディレクトリの下にあります。このJSPファイルを、Cactus実行環境よりアクセス可能な場所に配置します。仮に"/jsp/jspRedirector.jsp"でアクセスできるとします。最後に、クライアント側のcactus.properties設定ファイルの編集を行います。

 cactus.JspRedirectorName = /jsp/jspRedirector.jsp

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

※Cactus のバージョン1.3以前のjspRedirector.jspにはバグがあります。session暗黙オブジェクトが正常に動作しません。jspRedirector.jspのディレクティブの「session="false"」の記述を「session="true"」に変更してください。

6.2. JspTestCase

JSPのテストクラスはJspTestCaseを拡張して作成します。

  1:import org.apache.cactus.*;
2:import junit.framework.*;
3:... 4:public class TestSampleJSP extends JspTestCase 5:{ 6:... 7: public TestSampleJSP(String theName) 8: { 9: super(theName); 10: } 11: ... 12: public void testSample() throws Exception 13: { 14: //セッションなどの設定が必要な場合は、行う 15: this.pageContext.include("/sample.jsp"); 16: assert("bar", session.getAttribute("foo")); //セッションやリクエストの評価を行う
17: } 18:... 19: public void endSample(WebResponse response){ 20: //出力結果の評価を行う。 21: } 22:

JspTestCaseはServletTestCaseを拡張したクラスです。よって、request、response等の暗黙オブジェクト、begin、endメソッドの役割などは、ServletTestCaseの場合と同様に機能します。「セッションを設定してテストを行う」等も、全く同じ方法で実行可能です。

サーブレットのテストとJSPのテストで異なる点は、「テスト対象のサーブレット、JSPの指定方法」です。ServletTestCaseでは、testメソッド内でサーブレットのインスタンスを作成しメソッドを実行することによって、テスト対象のサーブレットを特定していました。それでは、JSPではどのようにテスト対象のページを指定すればよいのでしょうか。JspTestCaseでは、ServletTestCaseの暗黙オブジェクトに加えて、pageContext暗黙オブジェクトが用意されています。これは、org.apache.cactus.server.PageContextWrapperのインスタンスで、JSPのpageContext暗黙オブジェクトを仮想的に表すクラスになります。JSPのテストを行う場合は、pageContext暗黙オブジェクトのincludeメソッドで、テスト対象のJSPを読み込みます。あとは、サーブレットのテストの時と同様に、testメソッドやendメソッド内でassertメソッドを使用して、結果の評価を行います。

(実習課題1)

JSP 6.カスタムタグの基本2の実習課題3のテストクラスを作成しなさい。

6.3. カスタムタグのテスト

カスタムタグはハンドラークラスとTLDからなります。よって、テストもこの2つの観点から行わなくてはいけません。例えば、以下のようなカスタムタグを作成したいとします。

1: <%@ page contentType="text/html; charset=EUC-JP" %>
2: <%@ taglib uri="http://www.techscore.com/tags/example" prefix="example" %>
3: <html>
4: <head><title>Hello World</title></head>
5: <body>
6: <example:ShowMessage msg="Hello World" />
7: </body>
8: </html> 

このShowMessageタグは、属性msgに指定された文字列を表示する単純なタグです。ハンドラークラスはShowMessageTagです。このタグのテストは、以下の2つの場合が考えられます。

  • ShowMessageTagクラスが、「msg属性に指定された文字列を出力する」という機能を満たしているのか。
  • NameSpace"http://www.techscore.com/tags/example"のShowMessageカスタムタグを指定すると、正しくmsg属性に指定された文字列が表示されるのか。

ハンドラクラスはロジックを実行する部分ですから、そのテストは「タグが要求された機能仕様を満たしているか」確認する部分です。対して、カスタムタグの要素名、属性名が正確にTLDに設定されているかも、評価する必要があります。



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

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