Struts測試之action測試

          Struts 測試之 action 測試

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

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

          StrutsTestCase 是一個開源工具 , 可以到 http://strutstestcase.sourceforge.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 是否轉發到 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");

          ?????????? // 執行這個請求,即執行 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 是否發送了 ActionError ActionMessage. 參數為 ActionError/Message Key

          verifyNoActionErrors/Messages -- 校驗 ActionActionServlet controller 沒有發送 ActionError ActionMessage

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

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

          verifyInputForward -- 校驗 Action 是否轉發到 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");

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

          ?

          posted on 2006-02-16 17:34 扭轉乾坤 閱讀(656) 評論(1)  編輯  收藏 所屬分類: 測試相關

          評論

          # re: Struts測試之action測試 2011-12-29 11:08 ffs

          dfdf  回復  更多評論   

          <2006年2月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627281234
          567891011

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆分類(31)

          隨筆檔案(30)

          文章分類(32)

          文章檔案(33)

          相冊

          PHP小站-首頁

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 两当县| 石首市| 黔东| 禄丰县| 大竹县| 句容市| 柞水县| 驻马店市| 鄯善县| 壶关县| 文昌市| 娱乐| 七台河市| 无锡市| 龙南县| 石台县| 泉州市| 山阴县| 建平县| 巴彦淖尔市| 瑞丽市| 商城县| 内乡县| 伊金霍洛旗| 襄垣县| 勐海县| 青田县| 东丽区| 县级市| 江陵县| 朔州市| 上蔡县| 陈巴尔虎旗| 英吉沙县| 林芝县| 广灵县| 濮阳县| SHOW| 辽中县| 庆安县| 双牌县|