« Sun Java Enterprise Studioのメソッドオーバーライド | メイン | 第2世代XMLデータベース »

2006年01月23日

StrutsTestCase

StrutsTestCaseは、Strutsアプリケーションのテスト用に作成されたテスティング フレームワークです。JUnit を拡張し、さらに Struts の Action の動作や戻り値などをテストすることができます。
StrutsTestCase では、MockObjectでコンテナ不要の Mock アプローチとコンテナを動作させてテストする Cactus アプローチがあります。
今回プロジェクトで Sun Java Studio Enterprise を使用しています。そこでの StrutsTestCase とライブラリの設定などをまとめてみました。

○Sun Java Studio Enterprise での StrutsTestCase (Mock Approach)

テスト対象のアクションクラスは次のようなクラスです。
クライアントから送信されてきたパラメータに応じた挨拶を返すアクションです。

public class GreetAction extends Action {  
  private static Map map = new HashMap();
  static {
    map.put("morning", "おはようございます");
    map.put("afternoon", "こんにちは");
    map.put("night", "こんばんは");
  }
  
  public ActionForward execute(ActionMapping mapping, 
      ActionForm form, 
      HttpServletRequest request, 
      HttpServletResponse response) 
  throws Exception {
    GreetForm gform = (GreetForm)form;
    String[] items = gform.getItems();
    List list = new ArrayList();
    for (int i=0; i<items.length; i++) {
      list.add(map.get(items[i]));
    }
    request.setAttribute("result", list);
    return mapping.findForward("success");
  }   
}

このアクションが動作する Struts アプリケーションを作成し、web.xml や struts-config.xml などを設定します。ちなみにこのアプリケーションのフォルダ階層は次のとおりです。

/src
  /sample
    GreetAction.java
    GreetForm
/test
  /sample
    GreetActionStrutsTest.java
/web
  /WEB-INF
    web.xml
    struts-config.xml
    /lib
      ・struts関係のライブラリ

Strutsアプリケーションを構築した状態で、次の手順で行いました。

1.次のライブラリを[プロジェクトプロパティ]-[ライブラリ]の[コンパイル]タブで追加します。
  servlet.jar
  commons-collection.jar
  strutstest-2.1.x.jar
  ※struts 関係のライブラリはあらかじめライブラリに追加されていることが前提です。

2.WEB-INF が存在するディレクトリを[プロジェクトプロパティ]-[ライブラリ]の
[テスト実行時]ライブラリに追加します。
例えば /web/WEB-INF/web.xml である場合、「/web」フォルダをライブラリに追加します。
※WEB-INF直下にはあらかじめ struts 関係のコンフィグレーションが存在していることが前提です。

3.MockStrutsTestCase を継承するテストケースを作成します。

 package sample;
 
 import java.util.List;
 import servletunit.struts.MockStrutsTestCase;
 
 /**
  * StrutsTestCase を使用したサンプル
  */
 public class GreetActionStrutsTest extends MockStrutsTestCase {
   
   public void setUp() throws Exception {
     super.setUp();
   }
 
   public void tearDown() throws Exception {
     super.tearDown();
   }
 
   
   /** Creates a new instance of GreetActionStrutsTest */
   public GreetActionStrutsTest() {
   }
   
   public GreetActionStrutsTest(String name) {
     super(name);
   }
   
   public void testGreet001() {
     // Strutsアクションパスの指定
     setRequestPathInfo("/greet");
     // Requestパラメータの追加
     addRequestParameter("items", "morning");
     // アクションの実行
     actionPerform();
     // mapping.forwardの戻り値チェック
     verifyForward("success");
     // request属性の値をチェック
     Object object = getRequest().getAttribute("result");
     assertNotNull("結果が取得できません。", object);
     assertTrue(object instanceof List);
     List list = (List)object;
     assertEquals("挨拶が正しくありません。", 
         "おはようございます", list.get(0));
   }
 }

4.Shift + F6 でテストを実行します。

そうすると下記のようなメッセージが表示され、テストが成功したことが確認できます。

Testsuite: sample.GreetActionStrutsTest
Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.28 sec

投稿者 thatanaka : 2006年01月23日 18:15

コメント

RzPFyC qv8032ry07vdd91vdsv0ylv7y4

投稿者 bill : 2008年07月23日 17:45

RzPFyC qv8032ry07vdd91vdsv0ylv7y4

投稿者 bill : 2008年07月23日 17:45

RzPFyC qv8032ry07vdd91vdsv0ylv7y4

投稿者 bill : 2008年07月23日 17:46

8HO3uF sd89Vy7fF7f7siDq0j

投稿者 marry : 2008年08月26日 04:55

8HO3uF sd89Vy7fF7f7siDq0j

投稿者 marry : 2008年08月26日 04:56

C7l7AM fvdf87y978sdct9bvd892hbsc

投稿者 darry : 2008年08月26日 12:57

C7l7AM fvdf87y978sdct9bvd892hbsc

投稿者 darry : 2008年08月26日 12:57

C7l7AM fvdf87y978sdct9bvd892hbsc

投稿者 darry : 2008年08月26日 12:58

SDGtfj kjs610fgTrcv3pXa8f2h

投稿者 urban : 2008年11月11日 02:05

SDGtfj kjs610fgTrcv3pXa8f2h

投稿者 urban : 2008年11月11日 02:05

1EYwMm hi nice site thx http://peace.com

投稿者 bob : 2009年01月04日 10:28

1EYwMm hi nice site thx http://peace.com

投稿者 bob : 2009年01月04日 10:28

Ei6P50 comment3 ,

投稿者 Cywycufs : 2009年06月24日 18:02

Ei6P50 comment3 ,

投稿者 Cywycufs : 2009年06月24日 18:02

alt of intresting info here. thx

投稿者 BuySignulair : 2009年09月14日 12:31

Fuck
Fuck
Fuck
Fuck
Fuck

投稿者 ParPorgomiG : 2010年01月24日 02:07

Fuck
Fuck
Fuck
Fuck
Fuck

投稿者 ParPorgomiG : 2010年01月24日 22:18

PleHzn http://f8j3ndYbs83Bbq06Wlavp.com

投稿者 sandy : 2010年05月29日 10:41

PleHzn http://f8j3ndYbs83Bbq06Wlavp.com

投稿者 sandy : 2010年05月29日 10:41

PleHzn http://f8j3ndYbs83Bbq06Wlavp.com

投稿者 sandy : 2010年05月29日 10:42

PleHzn http://f8j3ndYbs83Bbq06Wlavp.com

投稿者 sandy : 2010年05月29日 10:42

IS5b1L http://fgb7s3Ffjsev7yrbvqqcf7.com

投稿者 sandy : 2010年08月04日 17:11

IS5b1L http://fgb7s3Ffjsev7yrbvqqcf7.com

投稿者 sandy : 2010年08月04日 17:11

IS5b1L http://fgb7s3Ffjsev7yrbvqqcf7.com

投稿者 sandy : 2010年08月04日 17:11

IS5b1L http://fgb7s3Ffjsev7yrbvqqcf7.com

投稿者 sandy : 2010年08月04日 17:12

コメントしてください




保存しますか?