您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源軟件測(cè)試解決方案 > 開源測(cè)試工具組合
使用StrutsTestCase進(jìn)行測(cè)試驅(qū)動(dòng)開發(fā)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2012/12/11 15:15:05 ] 推薦標(biāo)簽:

StrutsTestCase是用于測(cè)試Struts動(dòng)作的強(qiáng)大易用的測(cè)試框架。結(jié)合傳統(tǒng)的JUnit測(cè)試,Struts及StrutsTestCase將為您提供高覆蓋率的測(cè)試,從而提高產(chǎn)品可靠性。

        StrutsTestCase是基于JUnit的Struts動(dòng)作測(cè)試框架。Struts將為測(cè)試應(yīng)用程序的Struts動(dòng)作類提供簡(jiǎn)便有效的方法。

        典型的J2EE應(yīng)用程序是分層構(gòu)建的,其結(jié)構(gòu)如圖1所示:

◆DAO層封裝數(shù)據(jù)庫訪問。其中包括Hibernate映射、Object類、Hibernate查詢、實(shí)體EJB或其他實(shí)體-關(guān)系持久化技術(shù)。
◆業(yè)務(wù)層包含更多高級(jí)業(yè)務(wù)服務(wù)。理想狀態(tài)下,業(yè)務(wù)層相對(duì)獨(dú)立于數(shù)據(jù)庫實(shí)現(xiàn)。這一層常常用到EJB事務(wù)。
◆表示層向用戶展示應(yīng)用程序數(shù)據(jù),并解釋用戶請(qǐng)求。在Struts應(yīng)用程序中,該層通常使用JSP/JSTL頁面顯示數(shù)據(jù),并借助于Struts動(dòng)作解釋用戶的查詢請(qǐng)求。
◆客戶端層主要是用戶機(jī)器上運(yùn)行的web瀏覽器。客戶端邏輯(比如JavaScript)有時(shí)候置于該層,盡管很難對(duì)其進(jìn)行有效的測(cè)試。

        視具體架構(gòu),DAO及業(yè)務(wù)層可使用JUnit經(jīng)典測(cè)試法或者各種JUnit擴(kuò)展工具進(jìn)行測(cè)試。DbUnit是進(jìn)行數(shù)據(jù)庫單元測(cè)試的好選擇。

        另一方面,通常很難對(duì)Struts動(dòng)作進(jìn)行測(cè)試。即使業(yè)務(wù)邏輯完全限定于業(yè)務(wù)層,Struts動(dòng)作通常還是會(huì)包含重要的數(shù)據(jù)驗(yàn)證、數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)流控制代碼。如果不對(duì)Struts動(dòng)作進(jìn)行測(cè)試,那么將在代碼覆蓋率方面留下很大空白。而StrutsTestCase將填補(bǔ)這些空白。

        對(duì)動(dòng)作層進(jìn)行單元測(cè)試還會(huì)帶來其他的一些好處:

◆視圖層及控制層設(shè)計(jì)起來更容易,通常也更為簡(jiǎn)潔明了。
◆更易于重構(gòu)動(dòng)作類。
◆有助于避免冗余和無用的動(dòng)作類。
◆測(cè)試用例有助于編寫動(dòng)作層文檔,這些文檔在編寫JSP頁面時(shí)可以起到幫助作用。
        這些是測(cè)試驅(qū)動(dòng)開發(fā)的一些常見優(yōu)點(diǎn),這些優(yōu)點(diǎn)適用于Struts動(dòng)作層,也適用于其他的一些地方。

StrutsTestCase簡(jiǎn)介

        StrutsTestCase提供了在JUnit框架內(nèi)測(cè)試Struts動(dòng)作的靈活便利的方法。可以通過設(shè)置請(qǐng)求參數(shù)并檢查調(diào)用動(dòng)作后生成的Request或Session狀態(tài)的方式,來對(duì)Struts動(dòng)作進(jìn)行白盒測(cè)試。

        StrutsTestCase支持使用框架來模擬web服務(wù)器容器的模擬測(cè)試方法,或者在服務(wù)器容器(如Tomcat)內(nèi)使用Cactus框架進(jìn)行測(cè)試的容器內(nèi)測(cè)試方法。一般來說,我更喜歡模擬測(cè)試方法,因?yàn)檫@種方法更為輕量級(jí),運(yùn)行更快,從而可以實(shí)現(xiàn)更緊湊的開發(fā)周期。

        所有StrutsTestCase單元測(cè)試類均由模擬測(cè)試的MockStrutsTestCase或者容器內(nèi)測(cè)試的CactusStrutsTestCase派生。由于模擬測(cè)試方法設(shè)置更簡(jiǎn)單,運(yùn)行更快,所以在這里我們將主要關(guān)注模擬測(cè)試方法。

StrutsTestCase實(shí)踐

        為了使用StrutsTestCase測(cè)試該動(dòng)作,我們將創(chuàng)建一個(gè)擴(kuò)展MockStrutsTestCase類的新類。該類提供一些方法,用于構(gòu)建模擬HTTP請(qǐng)求,調(diào)用相應(yīng)的Struts動(dòng)作,并在動(dòng)作完成后驗(yàn)證應(yīng)用程序的狀態(tài)。

        設(shè)想一個(gè)用于安排住宿的在線數(shù)據(jù)庫,它帶有一個(gè)復(fù)合條件搜索函數(shù)。搜索函數(shù)通過/search.do動(dòng)作來實(shí)現(xiàn)。該動(dòng)作將根據(jù)特定條件執(zhí)行復(fù)合條件搜索,并將搜索結(jié)果列表置于名為results的屬性中,該屬性的作用域?yàn)檎?qǐng)求范圍內(nèi)。比如,下面的URL將會(huì)顯示法國的所有住宿地列表。

/search.do?country=FR

        現(xiàn)在假設(shè)我們使用測(cè)試驅(qū)動(dòng)方法來實(shí)現(xiàn)該方法。編寫動(dòng)作類,更新Struts配置文件。編寫測(cè)試用例,測(cè)試該動(dòng)作類(空)。采用嚴(yán)格的測(cè)試驅(qū)動(dòng)開發(fā)方法,首先編寫測(cè)試用例,再實(shí)現(xiàn)符合測(cè)試用例的代碼。在實(shí)際情況中,具體順序視測(cè)試代碼不同而有所不同。

        初始的測(cè)試用例看起來應(yīng)該如下:

public void testSearchByCountry() {
setRequestPathInfo("/search.do");
addRequestParameter("country", "FR");
actionPerform();
}
        在這里,我們?cè)O(shè)置調(diào)用路徑(setRequestPathInfo()),并添加請(qǐng)求參數(shù)(addRequestParameter())。

        接下來,使用調(diào)用動(dòng)作類。這樣將會(huì)驗(yàn)證Struts配置并調(diào)用相應(yīng)的動(dòng)作類,但是并不會(huì)對(duì)動(dòng)作的實(shí)際功能進(jìn)行測(cè)試。為了測(cè)試動(dòng)作的實(shí)際功能,我們需要驗(yàn)證動(dòng)作結(jié)果。

public void testSearchByCountry() {
setRequestPathInfo("/search.do");
addRequestParameter("country", "FR");
actionPerform();
verifyNoActionErrors();
verifyForward("suclearcase/" target="_blank" >ccess");
assertNotNull(request.getAttribute("results"));
}

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