您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > junit
基于Junit2.0的StrutsTestCase應(yīng)用
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/3/8 15:59:09 ] 推薦標(biāo)簽:

 首先我們頭腦總中有這樣一個(gè)actionmapping(注意只是假設(shè)的):

<action path=”/longin” type=”Jplateau.strutstestcase.LonginAction”

                   scope="request"

                   name="userForm">

<forward  name="success" path="/main.jsp"/>

<forward  name="login" path="/login.jsp"/>

</action>

有了這樣一個(gè)假設(shè),我們可以從測(cè)試代碼入手:

public class TestLoginAction extends MockStrutsTestCase {

public void setUp() {

 super.setUp();

 //這里做一些初始化的東西,譬如數(shù)據(jù)庫(kù)連接等

 }

public void tearDown() {

 super.tearDown();

 //這里關(guān)閉你在setup中開(kāi)啟的資源,如關(guān)閉數(shù)據(jù)庫(kù)連接等

}

    public TestLoginAction(String testName) { super(testName); }

public void testSuccessfulLogin() {

//選擇你要執(zhí)行哪一個(gè)actionmapping?這里用我們剛才做的假設(shè)材料

this. setRequestPathInfo("/login");

//首先要初始化提交數(shù)據(jù):用戶名、密碼

this.addRequestParameter(“usrename”,”Jplateau”);

this.addRequestParameter(“passwd”,”sandy”);

//注意有了這個(gè)之后,你可以從formbean中使用提交以后的用戶名和密碼數(shù)據(jù)了,下//面我會(huì)解釋

//好,初始化數(shù)據(jù)完成以后開(kāi)始執(zhí)行action中的execute(),很簡(jiǎn)單,掉用actionPerform()

this. ActionPerform();

//嚴(yán)正返回是否正確?這里用我們剛才做的假設(shè)材料

this verifyForward(“success”);.

//下面驗(yàn)證登陸成功以后session中是否有用戶的名稱?

String expect_username_from_session=”Jplateau”;

//這里需要插寫(xiě)內(nèi)容,是strutstestcase完全可以在測(cè)試代碼中使用跟真實(shí)action

//中一樣的環(huán)境,譬如可以通過(guò)this.getActionForm()得到相應(yīng)的ActionForm

//可以通過(guò)this.getRequest()得到HttpRequest

//可以通過(guò)this.getSession()得到HttpSession,如下:

String actual_username_from_session=this.getSession().getAttribute(“authentication”);

this. assertEquals(“”, expect_username_from_session, actual_username_from_session);

}

public void testFailureLogin(){

//登陸失敗的測(cè)試在此不寫(xiě)了

}

}

上邊是一個(gè)簡(jiǎn)單的測(cè)試代碼,好,運(yùn)行!他此時(shí)肯定是通不過(guò)的,首先我們的java代碼還沒(méi)有寫(xiě),struts-config.xml還沒(méi)有配,那么,現(xiàn)在你可以現(xiàn)在做這些事情:“用簡(jiǎn)單的做法或代碼讓上邊那個(gè)測(cè)試通過(guò)。”

第三部分:兼容struts1.1開(kāi)發(fā)員

下面說(shuō)寫(xiě)和struts1.1相關(guān)的內(nèi)容:測(cè)試tiles和多模塊!

測(cè)試tiles

假設(shè)我們的actionmapping中有這樣forward到tiles的情況,如下:

//這里有關(guān)struts中tiles的使用不做介紹,請(qǐng)參考相關(guān)資料

<forward name="success"                     path="/userListLayout"/>

同時(shí)tiles_defs.xml中有相應(yīng)配置:

//其中mainLayout是我在tiles定義的類型框架 

<definition name="userListLayout" extends="mainLayout">

      <put name="body" value="/main.jsp" />

  </definition>

那么我們?cè)跍y(cè)試代碼中可以如下測(cè)試tiles

//

this. verifyTilesForward(“success”,”userListLayout”);

測(cè)試多模塊:

關(guān)于多模塊的測(cè)試我希望能在下面代碼的注釋部分給你一個(gè)大概的介紹:

public class TestLoginAction extends MockStrutsTestCase {

    public TestLoginAction(String testName) { super(testName); }

public void testSuccessfulLogin() {

   //“mymodule”為系統(tǒng)中某個(gè)單獨(dú)模塊的名稱(文件夾的名稱)

setConfigFile("mymodule","/WEB-INF/struts-config-mymodule.xml");

//這個(gè)地方和前面單模塊的例子有些差別,此處有兩個(gè)參數(shù),第一個(gè)參數(shù)是模塊的

//名稱,第二個(gè)參數(shù)的意義和上邊相同;

//和單模塊相比,上邊兩處區(qū)別

       this.setRequestPathInfo("/mymodule","/login.do");

       this.addRequestParameter("username","Jplateau");

       this.addRequestParameter("password","sandy");

       this.actionPerform();

       this.verifyForward("success");

String expect_username_from_session=”Jplateau”;

String actual_username_from_session=this.getSession().getAttribute(“authentication”);

this. assertEquals(“”, expect_username_from_session, actual_username_from_session);

    }

}

參考資源:

1.  http://strutstestcase.sourceforge.net

(本篇文章基本上是沿用該篇文檔的思路,英文好的可以閱讀這篇文檔。)

2.  Kent Beck 《Test-Driven Development By Example》

3. 本文首發(fā)于本人資料站點(diǎn):http://plateau.sicool.com

上一頁(yè)12下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd