小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Struts測試之action測試

 Long_way 2007-05-08

Struts 測試之 action 測試

    測試 Struts Action 相對比較困難 , 因為 Struts 是運行在 Web 服務器中 , 因此要測試 Struts Action 就必須發(fā)布應用程序然后才能測試,換言之,我們必須要有 Web 容器的支持 . 我們想象一下 , 對于一個擁有上千個 JSP page 和數百甚至數千 Java Classes 的大規(guī)模應用程序 , 要把他們發(fā)布到諸如 Weblogic 之類的應用服務器再測試 , 需要多少的時間和硬件資源 ? 所以這種模式的測試是非常費時費力的 .

所以 , 如果有一種辦法能夠不用發(fā)布應用程序 , 不需要 Web 服務器就能象測試普通 Java Class 一樣測試 Struts Action, 那就能極大地加強 Struts 的可測試性能 , 使應用程序測試更為容易 , 簡單快速 . 現在這個工具來了 , 這就是 StrutsTestCase.

StrutsTestCase 是一個開源工具 , 可以到 http://urceforge.net 下載 . 目前最新版本是 2.1.3, 如果你使用 Servlet2.3 就下載 StrutsTestCase213-2.3.jar, 使用 Servlet2.4 的就下載 StrutsTestCase213-2.4.jar. 另外 StrutsTestCase 本身就是從 JUnit 繼承的 , 所以你還需要下載 JUnit3.8.1.

      下面就以一個簡單的 LogonAction 為例測試一下:

public class LogonAction extends Action {

      /**

       * Method execute

       * @param mapping

       * @param form

       * @param request

       * @param response

       * @return ActionForward

       */

     

     

      public ActionForward execute(

           ActionMapping mapping,

           ActionForm form,

           HttpServletRequest request,

           HttpServletResponse response) {

 

           DynaValidatorForm dynaForm = (DynaValidatorForm)form;

 

           String name = (String)dynaForm.get("username");

           String password = (String)dynaForm.get("password");

          

           if (name.equals("wangxq") && password.equals("wangxq")){

                 request.setAttribute("valid_user",form);

                 return mapping.findForward("admin");

           }

           return mapping.findForward("success");

      }

 

}

       LogonAction 的簡單說明:從 Logon 的頁面中輸入用戶名和密碼,在 LogonAction 中作判斷,并且作相應的跳轉。

      對其的測試代碼如下:

      public class LogonActionTest extends MockStrutsTestCase {

 

      protected void setUp() throws Exception {

           super.setUp();

           setContextDirectory(new File("WebRoot")); // 設置 WEB-INF 的上級目錄,讓程序可以找到 struts-config.xml 文件

           }

 

      protected void tearDown() throws Exception {

           super.tearDown();

      }

     

      public void testNoParameters(){

          

           setRequestPathInfo("/logon");

           actionPerform();

           verifyInputForward();

           String[] actionErrors = {"errors.required","errors.required"};

           verifyActionErrors(actionErrors);

           verifyInputForward();

      }

     

      public void testOneParameters(){

           setRequestPathInfo("/logon");

           addRequestParameter("username","wangxq");

           actionPerform();

           // 校驗 Action 是否轉發(fā)到 Action Mapping 里的 input 屬性

           verifyInputForward();

           String[] actionErrors ={"errors.required"};

           verifyActionErrors(actionErrors);

           verifyInputForward();

      }

     

      public void testSuccessAdmin(){

           // 設置 Request 的請求,說明該 Request 請求的是哪一個 Action ,或者說,請求的是哪一個 .do 文件。

           setRequestPathInfo("/logon");

           // 將參數和其對應的值加入到 request 中,相當于是 action 對應的 formbean 傳過來的值,即用戶在登陸界面輸入的值。

           addRequestParameter("username","wangxq");

           addRequestParameter("password","wangxq");

           // 執(zhí)行這個請求,即執(zhí)行 action 中對應的 execute 方法。

           actionPerform();

           // 驗證 forward 的名字是否正確,即有沒有跳轉到預期的頁面。

           verifyForward("admin");

// 驗證沒有任何的 ActionErrors 。

           verifyNoActionErrors();

      }

 

      public void testSuccessLogon(){

           setRequestPathInfo("/logon");

           addRequestParameter("username","aaaaaa");

           addRequestParameter("password","bbbbbb");

           actionPerform();

           verifyForward("success");

           verifyNoActionErrors();

      }

}

 

補充說明其中的一些方法:

verifyActionErrors/Messages -- 校驗 ActionActionServlet controller 是否發(fā)送了 ActionError ActionMessage. 參數為 ActionError/Message Key

verifyNoActionErrors/Messages -- 校驗 ActionActionServlet controller 沒有發(fā)送 ActionError ActionMessage

VerifyForward -- 校驗 Action 是否正確轉發(fā)到指定的 ActionForward.

VerifyForwardPath -- 校驗 Action 是否正確轉發(fā)到指定的 URL

verifyInputForward -- 校驗 Action 是否轉發(fā)到 Action Mapping 里的 input 屬性

其他的方法可以參考具體的文檔說明。

 

還有一點需要說明:

關于Web.xml和Struts-Config.xml

  缺省情況下 ,StrutsTestCase 認為你的 Web.xml struts-config.xml 的路徑分別是 :

   /WEB-INF/web.xml /WEB-INF/struts-config.xml

   1. 假如你的 web.xml/struts-config.xml 的路徑是

   d:/application/web/WEB-INF/web.xml(struts-config.xml) 的話 , 就需要把 d:/ application /web 加到 classpath.

      或者更簡單的方法是 setContextDirectory(new File("web")) 這樣就可以找到了。

   2. 假如你的 struts config strust-config-module.xml,

  那么必須調用 setConfigFile() 設置你的 struts config 文件

 

深入使用:

           <action path="/handle"

                      input="/handle.do?method=setUp"

                     name=" handleForm"

                     type=" handleAction"

                     scope="session"

                     parameter="method"

                     validate="true">

                <forward name="CurPage" path=" handle "/>

          </action>

這段配置文件中,使用了 parameter="method" 的配置,這樣在測試的時候就需要設置以下:

測試代碼中應該加入:

addRequestParameter("method ","setUp");

這樣,在執(zhí)行 actionPerform() 時,程序就自動進入 setUp 的方法,執(zhí)行該方法的測試。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多