Menu

FrontPage

Eclipseプラグイン
Eclipse小技集
リファクタリング講座
テスティングフレームワーク JUnit
MSDEについて



The 20 newest affair
2010-09-092010-09-082010-09-072010-09-062010-09-012010-08-312010-08-272010-08-242010-08-232010-08-172010-08-162010-07-302010-07-212010-07-132010-06-272010-06-182010-06-172010-06-16

JSF TestCase


Strutsを使用して作成されたWebアプリケーションをテストするとき、StrutsTestCaseを利用することが結構あります。

APサーバなしで、Actionオブジェクトをサクサク起動できるのは、大変便利です。
また、画面遷移先の確認などをすることで、ある程度、struts-config.xmlの検証にもなると思います。

JSFフレームワークでも、StrutsTestCaseみたいにビジネスロジックを起動、検証できたら便利だと思います。

調べてみると、

    「JSFUnit」[https://jsftest.dev.java.net/]

というプロジェクトがありましたが、まだ、なにもコミットされていません。
このプロジェクトが、いいものを作ってくれるのではと期待しています。

といっても、そのリリースを待っている訳にもいかない状況になりましたので、
JSF TestCaseを作成しました。

ここでは、簡単なサンプルと共に、バイナリを公開したいと思います。

機能的には、我々が必要最低限のものしかありませんし、現時点では、JSFフレームワークの解析不足のため、他の環境では動作しない可能性がありますので、ご了承ください。

動作確認をした環境  Λ


JSF1.1_01
JDK1.4.2_04

Download  Λ


こちらからダウンロードお願いします。

JsfTestCase0.1.0.zip


一般的なサンプルテストコード  Λ


申し訳ありませんが、以下は、StrutsTestCaseの知識を前提とします。

最初に、一般的だと思われるサンプルテストコードを示します。

SampleJSFTest.java
01 import java.io.File;
02 
03 import servletunit.jsf.MockJSFTestCase;
04 
05 public class SampleJSFTest extends MockJSFTestCase {
06 
07     public SampleJSFTest(String name) {
08         super(name);
09     }
10 
11     protected void setUp() throws Exception {
12         super.setUp();  // 必須
13     }
14 
15     protected void tearDown() throws Exception {
16         super.tearDown();  // 必須
17     }
18     
19     public void testSample() throws Exception {
20         
21         ////////////////////////////////////////////////////////////////////////////////
22         // 前提条件
23         
24         // コンテキストディレクトリの設定
25         setContextDirectory(new File("d:\\test"));
26         
27         // from-view-id設定
28         setFromViewId("/jsp/sample.jsp");
29         
30         // actionの設定
31         setAction("#{sample.doSomething}");
32         
33         // リクエストパラメータの設定
34         addRequestParameter("keyword""12345""#{sample.keyword}");
35         
36         ////////////////////////////////////////////////////////////////////////////////
37         // action実行
38         actionPerform();
39         
40         ////////////////////////////////////////////////////////////////////////////////
41         // 検証
42         
43         // to-view-id検証
44         verifyToViewId("/jsp/next.jsp");
45         
46         // エラーメッセージ検証
47         verifyNoFacesMessages();
48         
49         // マネージドビーンの検証
50         SampleBean sampleBean = (SampleBeangetBindObject("#{sample}");
51         assertEquals("12345", sampleBean.getKeyword());
52         
53     }
54 }

  • コンテキストディレクトリの設定[setContextDirectory]

    「WEB-INF」フォルダの親フォルダを指定します。
    上記サンプルでは、d:/test/WEB-INFのようなフォルダ構成のときの例です。
    そして、faces-config.xmlファイルが、d:/test/WEB-INF/faces-config.xmlの位置に存在する必要があります。

  • from-view-id設定[setFromViewId]

    faces-config.xmlに指定されている[navigation-rule]の[from-view-id]を設定します。
    このナビゲーションルールに従って検証することを示します。

  • actionの設定[setAction]

    検証の対象ビジネスロジックの指定です。
    jspには、[commandButton type="submit" value="ボタン" action="#{sample.doSomething}"]のようなサブミットボタンのタグがあるはずです。
    このボタンが押下されたときのロジックを検証することを示します。
    つまり、マネージドビーンsampleのdoSomethingメソッドを実行するよう指定しています。

  • リクエストパラメータの設定[addRequestParameter]

    リクエストパラメータを設定します。
    jspには、inputText、inputSecretなどのタグがあるはずです。
    上記サンプルは、[inputText id="keyword" value="#{sample.keyword}"]のように定義された入力項目の入力値["12345"]を設定しています。
    入力値は、マネージドビーンであるsampleのkeywordメンバにバインドされます。

  • action実行[actionPerform]

    設定されたアクションを実行します。

  • to-view-id検証[verifyToViewId]

    to-view-idを検証し、意図したとおりの遷移先になっているかを検証します。
    setFromViewIdで指定したナビゲーションルールに従って検証されます。

  • エラーメッセージ検証[verifyNoFacesMessages]

    エラーメッセージがないことを検証します。

  • マネージドビーンの取得[getBindObject]

    マネージドビーンの状態を検証するため、マネージドビーンのインスタンスを取得します。

サンプルに登場しなかったメソッド  Λ


サンプルでは使用されていませんが、他にもメソッドがあります。

  • setBindObject(String ref, Object value)

    マネージドビーンをセットします。
    あらかじめマネージドビーンをセットしておきたいときに使用します。
    actionPerform()の呼び出しより前に、このメソッドを使用してください。

[例]
setBindObject("#{user}", userInfo);

ActionListener  Λ


サンプルは、デフォルトのActionListenerを使った例なのですが、他にも、別のActionListenerを使用したり、複数のActionListenerを使用したりする場合があるはずです。

下記メソッドは、そのようなときに使用するメソッドです。

    現在、これらActionListenerに関する部分は、評価不十分です。

  • setCommandId

    <h:commandButton id="buttonId"/>のような記述のとき
        このメソッドで、"buttonId"という文字列をセットしておきます。

setCommandId("buttonId");

    ActionEvent#getComponent().getId()で、この文字列を取得することができます。

  • setCommandValue

    <h:commandButton value="Add"/>のような記述のとき
    このメソッドで、"Add"という文字列をセットしておきます。

setCommandValue("Add");

    ((UICommand) ActionEvent#getComponent()).getValue()で、この文字列を取得することができます。


  • setActionListener

    <h:commandButton actionListener="#{sample.process}"/>のような記述のとき
    このメソッドで、ActionListenerを指定します。

setActionListener("#{sample.process}");

    マネージドビーンsampleの、processメソッドは、javax.faces.event.ActionEventタイプの引数をとる必要があります。

  • addActionListener

    <h:commandButton/>
        <f:actionListener type="jp.co.dgic.listener.SampleActionListener"/>

    のように、ネストしたActionListenerがあるときに、このメソッドで、指定します。

addActionListener("jp.co.dgic.listener.SampleActionListener");

    jp.co.dgic.listener.SampleActionListenerクラスは、
    javax.faces.event.ActionListenerを実装している必要があります。

リクエストパラメータの属性  Λ


リクエストパラメータに対する属性も、多少指定できます。

現在、これらリクエストパラメータの属性に関する部分は、評価不十分です。

  • setRequired

    指定したIDのリクエストパラメータに「必須」属性をつけます。

addRequestParameter("keyword", "12345", "#{sample.keyword}");
setRequired("keyword", true);

    事前に、addRequestParameterが実行されている必要があります。

  • addLengthValidator

    指定したIDのリクエストパラメータに、LengthValidatorを追加します。

addRequestParameter("keyword", "12345", "#{sample.keyword}");
addLengthValidator("keyword", 10); // keywordは、10文字まで
addLengthValidator("keyword", 3, 10); // keywordは、3文字以上10文字まで

    事前に、addRequestParameterが実行されている必要があります。

  • addValidator

    指定したIDのリクエストパラメータに、Validatorを追加します。

addRequestParameter("keyword", "12345", "#{sample.keyword}");
addValidator("keyword", new TestValidator());

    事前に、addRequestParameterが実行されている必要があります。
    TestValidatorクラスは、javax.faces.validator.Validatorを実装している必要があります。

メッセージ検証  Λ


validatorなどを設定すると、メッセージの検証も必要です。

現在、これらメッセージに関する部分は、評価不十分です。

  • verifyNoFacesMessages

    エラーメッセージがないことを検証します。

verifyNoFacesMessages();
verifyNoFacesMessages("keyword");

    引数にパラメータIDを指定すると、指定したパラメータのエラーメッセージが、ないことを検証します。
    パラメータID省略のときは、全体で、エラーメッセージが、ひとつもないことを検証します。

  • verifyFacesMessages

    指定したパラメータのエラーメッセージが、指定のものであることを検証します。

String[] messages = new String[] {"...", "..."};
verifyFacesMessages("keyword", messages);

連絡方法  Λ


    問題、その他ありましたら、下記に連絡お願いします。

developer@dgic.co.jp


Attached File: [Attached File All List]

Lastmodified: 2006-06-14 (水) 10:31:35 (1548d)