<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 扭轉乾坤 閱讀(653) 評論(1)  編輯  收藏 所屬分類: 測試相關

    評論

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

    dfdf  回復  更多評論   

    <2011年12月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(2)

    隨筆分類(31)

    隨筆檔案(30)

    文章分類(32)

    文章檔案(33)

    相冊

    PHP小站-首頁

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 中文字幕高清免费不卡视频| 1000部啪啪毛片免费看| 国产l精品国产亚洲区在线观看| 国内精品免费久久影院| 亚洲最大在线观看| 日韩黄色免费观看| 免费无码又爽又刺激网站| 亚洲精品中文字幕无乱码麻豆| 国产亚洲精品免费| 91人人区免费区人人| 亚洲AV第一成肉网| 亚洲av无码一区二区乱子伦as| 97人伦色伦成人免费视频| 美女无遮挡拍拍拍免费视频 | 亚洲自偷自偷在线制服| 四虎永久在线观看免费网站网址 | 无码A级毛片免费视频内谢| 亚洲国产精品嫩草影院| 亚洲AV无码久久精品成人| 日本人护士免费xxxx视频| 色猫咪免费人成网站在线观看 | 亚洲av第一网站久章草| 久久久无码精品亚洲日韩蜜臀浪潮| 在线观看亚洲免费| 最近免费中文在线视频| 一级毛片免费播放视频| 亚洲偷偷自拍高清| 亚洲AV无码国产在丝袜线观看| 日本高清免费不卡在线| 99久久免费中文字幕精品| 国产免费AV片在线观看播放| 亚洲熟妇AV一区二区三区宅男| 久久精品7亚洲午夜a| 亚洲国产午夜中文字幕精品黄网站 | 亚洲精品国产福利在线观看| 丁香五月亚洲综合深深爱| 国产亚洲福利一区二区免费看| 久久久久国色AV免费观看性色| 久久国产免费一区二区三区| 无人在线直播免费观看| 久久精品视频免费播放|