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

 首先我們頭腦總中有這樣一個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>

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

public class TestLoginAction extends MockStrutsTestCase {

public void setUp() {

 super.setUp();

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

 }

public void tearDown() {

 super.tearDown();

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

}

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

public void testSuccessfulLogin() {

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

this. setRequestPathInfo("/login");

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

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

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

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

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

this. ActionPerform();

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

this verifyForward(“success”);.

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

String expect_username_from_session=”Jplateau”;

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

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

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

//可以通過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(){

//登陸失敗的測試在此不寫了

}

}

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

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

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

測試tiles

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

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

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

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

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

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

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

  </definition>

那么我們在測試代碼中可以如下測試tiles

//

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

測試多模塊:

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

public class TestLoginAction extends MockStrutsTestCase {

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

public void testSuccessfulLogin() {

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

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

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

//名稱,第二個參數(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

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