亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
StrutsTestCase介紹
作者:網絡轉載 發布時間:[ 2013/2/21 13:28:18 ] 推薦標簽:

StrutsTestCase for JUnit是Junit TestCase類的擴展,提供基于Struts框架的代碼測試裝置。StrutsTestCase同時提供Mock 對象方法和Cactus方法用來實際運行Struts ActionServlet,你既可以通過運行servlet引擎來測試,也可以不通過它。因為StrutsTestCase使用ActionServlet控制器來測試你的代碼,因此你不僅可以測試Action對象的實現,而且可以測試mappings,from beans以及forwards聲明。

使用StrutsTestCase不啟動servlet容器來測試struts應用程序(容器外測試)也屬于Mock對象測試,但是與EasyMock不同的是,EasyMock是提供了創建Mock對象的API,而StrutsTest則是專門負責測試Struts應用程序的Mock對象測試框架。

除了容器外測試,StrutsTest也可以很方便的用容器內的測試。

StrutsTestCase當前的版本是StrutsTest2.1.2,支持Servlet2.2和2.3的規范,并且支持Struts1.1,Cactus1.6.1和Junit3.8.1。在這個版本中不支持Struts1.0。如果需要測試struts1.0的應用程序,對應的版本是StrutsTest2.0。可以從http://sourceforge.net/projects/strutstestcase/下載。

首先應從StrutsTestCase主頁下載該工具,解壓后會有一個JAR文件,還有一個例子以及API DOC。編寫StrutsTestCase時需將這個JAR文件引入到工程中(和Struts中的JAR文件放在一起),此外由于是對JUnit的擴展,因此還必須將Junit.jar引入到工程中。

上面已經介紹過有兩種測試方法,下面分別來簡單說明:

1)                  MockStrutsTestCase(Mock對象測試):通過模擬容器來進行測試。MockStrutsTestCase用一套HttpServlet mock對象在不需要運行Servlet引擎的情況下來模擬容器環境。

2)                  CactusStrutsTestCase(In-container testing):在真實運行的容器中通過使用Cactus測試框架進行測試。

說明:上述兩個類都是對Junit TestCase的擴展。如果要將Mock對象測試方法改為Cactus方法,只需要將我們所定義子類的父類由MockStrutsTestCase改為CactusStrutsTestCase即可,而不需要更改內部代碼。

命名規則:對于類的命名沒有嚴格的規范,但個人建議使用Test+要測試的Action名;方法名可以任意取,但注意一點:系統只會自動運行以”test”開頭的方法名來進行測試。

下面通過一個我寫的一個實例來說明具體使用方法,先來看一個Action(RegisterAction.java)中的代碼:

 

package com.firefly;

 

import org.apache.struts.action.*;

import javax.servlet.http.*;

/**

 * @author firefly

 */

public class RegisterAction extends Action{

    public ActionForward execute(ActionMapping mapping,ActionForm form,

     HttpServletRequest req, HttpServletResponse res){

            RegisterForm rf = (RegisterForm)form;

            //String userName = rf.getUserName();

            String password1 = rf.getPassword1();

            String password2 = rf.getPassword2();

            if(password1.equals(password2)){

               try{

                    return mapping.findForward("success");

                }

                catch(Exception e){

                    return mapping.findForward("failure");

                }

            }

            return mapping.findForward("failure");

        }

 

}

功能很簡單,即查看兩次輸入的密碼是否相同,相同則轉到success,否則轉到failure。下面是測試代碼(TestRegisterAction.java):

 

package com.firefly;

import servletunit.struts.*;

/**

 * @author firefly

 */

public class TestRegisterAction extends MockStrutsTestCase{

  

    public void setUp() throws Exception{

        super.setUp();

    }

    public void tearDown() throws Exception{

        super.tearDown();

    }

  

    public TestRegisterAction(String testName){

        super(testName);

    }

  

    public void testSuccessfulLogin(){

        setRequestPathInfo("/register");

        addRequestParameter("userName","hellking");

        addRequestParameter("password1","123");

        addRequestParameter("password2","123");

        actionPerform();

        verifyForward("success");

    }

    public void testFailedLogin(){

        setRequestPathInfo("/register");

        addRequestParameter("userName","hellking");

        addRequestParameter("password1","123");

        addRequestParameter("password2","");

        actionPerform();

        verifyForward("failure");

    }

 

}

說明:

1)      如果override了setUp()和tearDown()方法,那么必須在第一行顯示調用其父類的相應方法,原因很簡單,父類在這兩個方法中定義了很多內容來保證程序能夠按照既定規則執行,所以我們必須加載它。

2)      在測試方法中,我們需要做的第一件事是通知Struts在這個測試中要使用哪一個映射(mapping),我們指定一個和Struts mapping相關聯的路徑,這與Struts標簽庫方法中使用的機制相同。

3)      我們接下來要做的是通過request對象傳遞form bean屬性,這同樣與Struts所做的相同。

4)      該到運行action的時候了,我們通過使用actionPerform()方法來完成該任務。

5)      后要檢驗的是程序運行結果是否和我們所預期的一樣,通過調用verifyForward()方法來進行確認。這里還有可能用到其他一些方法,如:assertEquals(),assertNull(),verifyNoActionErrors(),verifyActionErrors()等等。

6)      即使你在test方法中不進行任何測試,系統也不會提示任何錯誤(這個與Action中execute()方法必須返回ActionMapping有所不同),顯示的測試結果仍然為成功。你可以在一個test方法中寫多個測試,但個人不建議這樣使用,這會給方法的命名及程序的結構帶來很大的困擾。此外,test方法中遇到測試失敗后便會立即返回,而不是繼續向下運行(這和and語句頗有相似之處)。

7)      主要函數和作用:

setRequestPathInfo,設置request的請求

addRequestParameter,將參數和對應的值加入request中

 actionPerform,執行這個請求

verifyForward,驗證forward的名字是否正確

verifyForwardPath,驗證forward的path是否正確

verifyNoActionErrors,驗證在action執行過程中沒有ActionError產生

verifyActionErrors,驗證在action執行過程中產生的ActionError集合的內容

詳細請查看API  DOC。

 

下面為一些參考網站:

StrutsTestCase主頁:http://sourceforge.net/projects/strutstestcase/

API  DOC:http://strutstestcase.sourceforge.net/api/index.html

 

如果需要進一步了解Mock Objects和Cactus測試框架,可以去其官方網站:

Mock Objects:http://www.mockobjects.com/

Cactus:http://jakarta.apache.org/cactus/index.html

軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 看黄网页 | 午夜寂寞影院视频在线观看 | 国产视频一区在线播放 | 久久精品人人做人人爽97 | 国产免费播放一区二区三区 | 午夜视频福利在线 | 麻豆日韩国产精品欧美在线 | 一级毛片免费视频观看 | 18男同志可播放free69 | 日韩欧美一区二区三区不卡视频 | 理论片免费欧美片 | 黄色免费在线观看 | 国产精品视频人人做人人爱 | 日韩黄色小视频 | 97人人人人| 青青草论坛 | 猫色综合网 | 妞干网在线免费视频 | 日韩男女做性高清在线观看 | 嘿嘿嘿视频免费网站在线观看 | 免费在线色 | 最近2019中文字幕高清字幕 | 日韩精品视频在线免费观看 | 丁香六月综合 | 欧美日本一区亚洲欧美一区 | 免费国产一级特黄久久 | 在线视频一区二区三区四区 | 中文字字幕码一二三区 | 一级做a爰全过程免费视频 一级做a爰片鸭王 | 99爱在线精品视频免费观看9 | 永久视频 | 久久天天躁夜夜躁狠狠躁2015 | 男女涩涩网站 | 色屁屁一区二区三区视频国产 | 日本高清一区二区三区不卡免费 | 一区二区三区在线 | 欧 | 深夜www| 在线亚洲综合美国十次 | 欧美 日韩 视频 | 亚洲网站在线观看 | 天天躁狠狠躁夜夜躁 |