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

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

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

    Struts測(cè)試之a(chǎn)ction測(cè)試

    Struts 測(cè)試之 action 測(cè)試

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

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

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

    ????? 下面就以一個(gè)簡(jiǎn)單的 LogonAction 為例測(cè)試一下:

    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 的簡(jiǎn)單說(shuō)明:從 Logon 的頁(yè)面中輸入用戶(hù)名和密碼,在 LogonAction 中作判斷,并且作相應(yīng)的跳轉(zhuǎn)。

    ????? 對(duì)其的測(cè)試代碼如下:

    ????? public class LogonActionTest extends MockStrutsTestCase {

    ?

    ????? protected void setUp() throws Exception {

    ?????????? super.setUp();

    ?????????? setContextDirectory(new File("WebRoot")); // 設(shè)置 WEB-INF 的上級(jí)目錄,讓程序可以找到 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();

    ?????????? // 校驗(yàn) Action 是否轉(zhuǎn)發(fā)到 Action Mapping 里的 input 屬性

    ?????????? verifyInputForward();

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

    ?????????? verifyActionErrors(actionErrors);

    ?????????? verifyInputForward();

    ????? }

    ?????

    ????? public void testSuccessAdmin(){

    ?????????? // 設(shè)置 Request 的請(qǐng)求,說(shuō)明該 Request 請(qǐng)求的是哪一個(gè) Action ,或者說(shuō),請(qǐng)求的是哪一個(gè) .do 文件。

    ?????????? setRequestPathInfo("/logon");

    ?????????? // 將參數(shù)和其對(duì)應(yīng)的值加入到 request 中,相當(dāng)于是 action 對(duì)應(yīng)的 formbean 傳過(guò)來(lái)的值,即用戶(hù)在登陸界面輸入的值。

    ?????????? addRequestParameter("username","wangxq");

    ?????????? addRequestParameter("password","wangxq");

    ?????????? // 執(zhí)行這個(gè)請(qǐng)求,即執(zhí)行 action 中對(duì)應(yīng)的 execute 方法。

    ?????????? actionPerform();

    ?????????? // 驗(yàn)證 forward 的名字是否正確,即有沒(méi)有跳轉(zhuǎn)到預(yù)期的頁(yè)面。

    ?????????? verifyForward("admin");

    // 驗(yàn)證沒(méi)有任何的 ActionErrors

    ?????????? verifyNoActionErrors();

    ????? }

    ?

    ????? public void testSuccessLogon(){

    ?????????? setRequestPathInfo("/logon");

    ?????????? addRequestParameter("username","aaaaaa");

    ?????????? addRequestParameter("password","bbbbbb");

    ?????????? actionPerform();

    ?????????? verifyForward("success");

    ?????????? verifyNoActionErrors();

    ????? }

    }

    ?

    補(bǔ)充說(shuō)明其中的一些方法:

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

    verifyNoActionErrors/Messages -- 校驗(yàn) ActionActionServlet controller 沒(méi)有發(fā)送 ActionError ActionMessage

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

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

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

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

    ?

    還有一點(diǎn)需要說(shuō)明:

    關(guān)于Web.xml和Struts-Config.xml

      缺省情況下 ,StrutsTestCase 認(rèn)為你的 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) 的話(huà) , 就需要把 d:/ application /web 加到 classpath.

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

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

      那么必須調(diào)用 setConfigFile() 設(shè)置你的 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" 的配置,這樣在測(cè)試的時(shí)候就需要設(shè)置以下:

    測(cè)試代碼中應(yīng)該加入:

    addRequestParameter("method ","setUp");

    這樣,在執(zhí)行 actionPerform() 時(shí),程序就自動(dòng)進(jìn)入 setUp 的方法,執(zhí)行該方法的測(cè)試。

    ?

    posted on 2006-02-16 17:34 扭轉(zhuǎn)乾坤 閱讀(655) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): 測(cè)試相關(guān)

    評(píng)論

    # re: Struts測(cè)試之a(chǎn)ction測(cè)試 2011-12-29 11:08 ffs

    dfdf  回復(fù)  更多評(píng)論   

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

    導(dǎo)航

    統(tǒng)計(jì)

    • 隨筆 - 30
    • 文章 - 33
    • 評(píng)論 - 23
    • 引用 - 0

    常用鏈接

    留言簿(2)

    隨筆分類(lèi)(31)

    隨筆檔案(30)

    文章分類(lèi)(32)

    文章檔案(33)

    相冊(cè)

    PHP小站-首頁(yè)

    搜索

    •  

    積分與排名

    • 積分 - 46416
    • 排名 - 1044

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 中文字幕精品亚洲无线码一区 | 四虎永久在线精品免费观看地址 | 国产男女爽爽爽爽爽免费视频| 美女内射毛片在线看免费人动物| 97在线观免费视频观看| 日本免费的一级v一片| 亚洲性日韩精品一区二区三区| 亚洲国产一成人久久精品| 亚洲精品在线免费看| 亚洲第一第二第三第四第五第六| 一道本在线免费视频| 99热精品在线免费观看| 好吊妞视频免费视频| 相泽亚洲一区中文字幕| 亚洲酒色1314狠狠做| 国产成人亚洲综合a∨| 免费视频一区二区| 无码中文字幕av免费放| 亚洲午夜精品第一区二区8050| 亚洲精品在线视频观看| 特级毛片免费播放| 91精品国产免费网站| 免费A级毛片无码久久版| 亚洲精品在线观看视频| 亚洲高清国产拍精品熟女| 老司机69精品成免费视频| 女人18毛片特级一级免费视频 | 亚洲a无码综合a国产av中文| 三年片在线观看免费| 毛片免费在线视频| 亚洲日韩国产精品第一页一区| 亚洲a级成人片在线观看| 国产精品无码免费专区午夜| 思思re热免费精品视频66 | 国产福利电影一区二区三区,亚洲国模精品一区| 亚洲国产精品久久| 猫咪免费观看人成网站在线| aⅴ在线免费观看| 亚洲人午夜射精精品日韩| 一本色道久久88—综合亚洲精品| 国产一二三四区乱码免费|