欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
利用StrutsTestCase測試Struts應用程序
利用StrutsTestCase測試Struts應用程序

作者:葉楓




版權聲明:本文可以自由轉載,轉載時(shí)請務(wù)必以超鏈接形式標明文章原始出處和作者信息及本聲明
作者:葉楓(http://blog.matrix.org.cn/page/葉楓)
原文:[http://www.matrix.org.cn/resource/article/44/44008_StrutsTestCase.html]http://www.matrix.org.cn/resource/article/44/44008_StrutsTestCase.html[/url]
關(guān)鍵字:Struts StrutsTestCase


一、Struts測試概述
  
  一個(gè)具有良好系統架構的J2EE應用程序至少有三層組成,即表現層,商業(yè)層和系統
集成層(包括數據存取以及和其他系統集成),目前,Struts是應用比較廣泛,實(shí)現MVC2模式應用于表現層的一種技術(shù). 在這里面,Struts Action主要用來(lái)完成一些簡(jiǎn)單的數據校驗,轉換,以及流程轉發(fā)控制(注意:這里流程不是業(yè)務(wù)規則). 因此在對整個(gè)應用程序進(jìn)行測試時(shí),我們同時(shí)也要測試Struts Action.

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

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


二、StrutsTestCase 概述

  StrutsTestCase 是一個(gè)功能強大且容易使用的Struts Action開(kāi)源測試工具,
它本身就是在大名鼎鼎的JUnit基礎上發(fā)展起來(lái)的。因此通過(guò)和JUnit結合
使用能極大加強應用程序的測試并加快應用程序的開(kāi)發(fā).
  
  StrutsTestCase提供了兩者測試方式,模仿方式和容器測試方式. 所謂模仿方式就是有StrutsTestCase本身來(lái)模擬Web服務(wù)器. 而容器測試方式則需要Web服務(wù)器. 本文要討論的是前者,原因很簡(jiǎn)單,不需要Web服務(wù)器就能象測試普通的Java Class一樣測試Struts Action.


三、準備StrutsTestCase和Struts Action/ActionForm/Config

  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)單的例子來(lái)做測試. 假設我們有一張表Hotline(country varchar2(50),pno varchar2(50)),
我們要做的是根據輸入條件從這張表檢索相應的記錄.檢索條件是country.

Value Object:  
package sample;      
      public class HotlineDTO implements Serializable{
        private String country = "";
       private String pno = "";        
        /**
         * Method HotlineActionForm
         *
         *
         */
        public HotlineDTO () {
             super();
      }

        
        public void setCountry(String country) {
                this.country = country;
        }

        public void setPno(String pno) {
                this.pno = pno;
        }

        public String getCountry() {
                return (this.country);
        }

        public String getPno() {
                return (this.pno);
        }        
      }


ActionForm:
      
package sample;
      import org.apache.struts.action.ActionForm;
      public class HotlineActionForm extends ActionForm{
        private String country = "";
        private String pno = "";        
        /**
         * Method HotlineActionForm
         *
         *
         */
        public HotlineActionForm() {
                super();
        }

        
        public void setCountry(String country) {
                this.country = country;
        }

        public void setPno(String pno) {
                this.pno = pno;
        }

        public String getCountry() {
                return (this.country);
        }

        public String getPno() {
                return (this.pno);
        }        
      }
  


Action Class:

     public class SearchHotlineAction extends Action {
     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
      HttpServletResponse response) throws Exception {
        String target = "";
        try{
         //調用HotlineDAO檢索hotline
         String country=((HotlineActionForm)form).getCountry();
         List hotlineList = HotlineDAO.getHotlineList(country);
         if(hotlineList!=null && hotlineList.size()>0){
            request.setAttribute("hotlineList",hotlineList);
            target = "hotlineList";
         }else{
            target = "notfound";
         }
        }catch(Exception ex){
           ....
        }
                
        
     }


Struts Config:
  
<struts-config>
  
   <form-beans>
     <form-bean name="hotlineActionForm" type="sample.HotlineActionForm" />
       .......
   </form-beans>
  <action-mappings>
     <action path="/SearchHotline"
           name="hotlineActionForm"
           type="sample.SearchHotlineAction "
                     scope="request"                                  
                   validate="false">
      <forward name="hotlineList" path="/hotlineList.jsp"/>        
      <forward name="notfound" path="/searchHotline.jsp"/>
   </action>
    .....
  <action-mappings>
   ........
<struts-config>


四、初試StrutsTestCase

    當采用模擬方式時(shí),所有的StrutsTestCase測試Class都是從MockStrutsTestCase繼承下來(lái)的.
    下面我們就創(chuàng )建一個(gè)最簡(jiǎn)單的測試Class.
    
public class SearchHotlineAction extends MockStrutsTestCase {

     public void setUp()throws Exception{
     }

     public void tearDown()throws Exception{
     }

    public void testSearchHotline() throws Exception{
    setRequestPathInfo("/SearchHotline.do");
    addRequestParameter("country", "CN");
    actionPerform();
    }
    }


   上面的Class相信用過(guò)JUnit的朋友都很熟悉.
    好了,一個(gè)簡(jiǎn)單的測試例子就完成了,如果你用的是Eclipse就選擇Run-Run...-JUnit-New就可以直接運行.不需要發(fā)布你的程序,不需要任何的Web服務(wù)器支持,就可以測試Struts Action,這就是StrutsTestCase帶來(lái)的好處.下面簡(jiǎn)單地介紹一下它是怎么工作的.

    在上面的例子中,我們調用setRequestPathInfo()告訴StrutsTestCase我們要模擬JSP調用SearchHotline.do這個(gè)Action,并且調用addRequestParameter()增加了一個(gè)參數country.最后調用actionPerform()運行.

看到這里,大家發(fā)現一個(gè)問(wèn)題沒(méi)有? 在上面Action的源代碼里我們是通過(guò)

String country=((HotlineActionForm)form).getCountry();


也就是ActionForm來(lái)取得輸入的參數值,可我們在testSearchHotline()方法里并沒(méi)有設置ActionForm?

那么它是怎么出來(lái)的呢? 其實(shí)大家如果熟悉Struts的運行流程的話(huà)就知道,JSP接受用戶(hù)的輸入并發(fā)請求時(shí)
都是類(lèi)似這樣的http://hostname/servletName?param1=value1&param2=value2. 只是Struts接受到這些
參數后再根據Struts Config里的Action和ActionForm的映射把他們轉為ActionForm后傳給Action的.

   在上面的例子,我們只是簡(jiǎn)單地運行了Action,那么Action是否正確執行以及返回的結果是不是我們想要的呢?

我們繼續完善一下testSearchHotline()這個(gè)Method.

public void testSearchHotline() throws Exception{
    setRequestPathInfo("/SearchHotline.do");
    addRequestParameter("country", "CN");
    actionPerform();
    verifyNoActionErrors();
    verifyForward("hotlineList");
    assertNotNull(request.getAttribute("hotlineList"));
    List hotlineList = (List) request.getAttribute("hotlineList");
    for (Iterator it = hotlineList.iterator();it.hasNext();){
     ....
    }
    }


我們在actionPerform()后增加了幾行語(yǔ)句來(lái)斷定Struts Action是否正確執行.
   verifyNoActionErrors() -- 判斷Action里沒(méi)有任何的Action;
   verifyForward("hotlineList") -- 判斷Action確實(shí)轉發(fā)到hotlineList;      
   assertNotNull(request.getAttribute("hotlineList")) -- 判斷Action確實(shí)返回了hotlineList并且不為空

到這里,我們已經(jīng)基本上討論完了StrutsTestCase的核心部分. 從頭到尾,我們沒(méi)有發(fā)布應用程序,也不需要Web服務(wù)器,對我們來(lái)講,Struts Action就象普通的Java Class一樣容易調試測試.這就是StrutsTestCase給我們帶來(lái)的方便.

五、深入StrutsTestCase

  除了以上我們用到的幾個(gè)斷定和校驗方法外,StrutsTestCase還提供了其他幾個(gè)方法便于我們測試Struts Action. 下面我一一講述,具體的大家可以參考文檔.

verifyActionErrors/Messages --  校驗ActionActionServlet controller 是否發(fā)送了ActionError或ActionMessage.   參數為ActionError/Message Key
verifyNoActionErrors/Messages --校驗ActionActionServlet controller 沒(méi)有發(fā)送ActionError或ActionMessage
VerifyForward -- 校驗Action是否正確轉發(fā)到指定的ActionForward.
VerifyForwardPath -- 校驗Action是否正確轉發(fā)到指定的URL
verifyInputForward -- 校驗Action是否轉發(fā)到Action Mapping里的input屬性
verifyTilesForward/verifyInputTilesForward--和以上類(lèi)似,應用程序使用到tiles時(shí)用的

六、關(guān)于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:/app/web/WEB-INF/web.xml(struts-config.xml)的話(huà),就需要把d:/app/web加到classpath.
  
  2. 假如你的struts config是strust-config-module.xml,
  那么必須調用setConfigFile()設置你的struts config文件
  

七、結束語(yǔ)
  J2EE應用程序的測試在開(kāi)發(fā)過(guò)程中占有相當重要的位置,利用StrutsTestCase能極大方便你測試基于Struts的應用程序.

關(guān)于作者:
葉楓:熱愛(ài)Java和Oracle. 在軟件開(kāi)發(fā)有近10年, 目前在國外一家美國大公司擔任SA, 負責技術(shù)研究。作者Blog:http://blog.matrix.org.cn/page/葉楓
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java開(kāi)源測試工具匯總 三億文庫
struts原理與實(shí)踐(2)
Struts測試框架StrutsTestCase實(shí)戰
Struts1.x配置 實(shí)現表單驗證
歡迎光臨 - 琳婕小筑-老貓的理想 - Struts配置說(shuō)明 -
Struts開(kāi)發(fā)技巧
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久