国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Struts測(cè)試框架StrutsTestCase實(shí)戰(zhàn)

2019-11-18 15:55:04
字體:
供稿:網(wǎng)友

  閱讀提要 StrutsTestCase是一個(gè)強(qiáng)有力的易于使用的針對(duì)Struts行為的測(cè)試框架。StrutsTestCase,并與傳統(tǒng)型JUnit測(cè)試相結(jié)合,將會(huì)帶給你一個(gè)相當(dāng)高的測(cè)試覆蓋率并提高你的產(chǎn)品的可靠性。

  一、引言

  StrutsTestCase是一個(gè)用于測(cè)試Struts行為的基于Junit的測(cè)試框架。假如你使用Struts,那么你會(huì)注重到它可以提供給你一種輕易而有效的方式來測(cè)試你的應(yīng)用程序的Struts行為類。

  典型的J2EE應(yīng)用程序都是分層構(gòu)建的,如圖1所示。

  ·DAO層封裝了數(shù)據(jù)庫存取。Hibernate映射和對(duì)象類,Hibernate查詢,實(shí)體EJBs,或一些其它的實(shí)體-關(guān)系持續(xù)性技術(shù)都可以在這一層找到。

  ·商業(yè)層包含更高級(jí)的商業(yè)服務(wù)。理想地,這個(gè)商業(yè)層將是相對(duì)獨(dú)立于數(shù)據(jù)庫實(shí)現(xiàn)。在這個(gè)層上經(jīng)常使用會(huì)話EJBs。

  ·描述層包含為用戶顯示應(yīng)用程序數(shù)據(jù)并解釋用戶請(qǐng)求。在一個(gè)Struts應(yīng)用程序中,這一層典型地使用jsp/JSTL頁面來顯示數(shù)據(jù)并且使用Struts行為來解釋用戶查詢。

  ·客戶層基本上是運(yùn)行于用戶機(jī)器上的web瀏覽器。客戶端邏輯(例如,javascript)有時(shí)被放在這里,盡管很難對(duì)其進(jìn)行有效地測(cè)試。

Struts測(cè)試框架StrutsTestCase實(shí)戰(zhàn)
圖1.典型的J2EE架構(gòu)

  DAO和商業(yè)層的測(cè)試或者可以通過使用經(jīng)典的JUnit測(cè)試或者使用各種JUnit擴(kuò)展來進(jìn)行,具體依靠于架構(gòu)的實(shí)現(xiàn)細(xì)節(jié)。DbUnit是一種用來進(jìn)行數(shù)據(jù)庫單元測(cè)試的良好選擇。

  另一方面,測(cè)試Struts行為總是很困難的事情。即使在商業(yè)層嚴(yán)格地限制于商業(yè)層的構(gòu)建時(shí),Struts行為也總要包含重要數(shù)據(jù)校驗(yàn),轉(zhuǎn)換和流程控制代碼。不對(duì)Struts行為進(jìn)行測(cè)試將會(huì)在代碼覆蓋率上留下一道很臟的鴻溝。StrutsTestCase會(huì)讓你填充這條鴻溝。

  對(duì)行為層進(jìn)行單元測(cè)試還帶來其它一些益處:

  ·可以更好地規(guī)劃視圖和控制層,從而使之更為簡(jiǎn)單清楚。

  ·更輕易重構(gòu)行為類。

  ·避免冗余的未使用的行為類。

  ·測(cè)試實(shí)例有助于對(duì)行為層進(jìn)行歸檔-這在創(chuàng)建屏幕時(shí)是很有用的。

  上面是基于測(cè)試開發(fā)的典型好處,并且它們可以應(yīng)用于在各種情況下使用的Struts行為層。

  二、StrutsTestCase簡(jiǎn)介

  StrutsTestCase工程提供了一種靈活又方便的方法來從JUnit框架內(nèi)測(cè)試Struts行為。它能夠使你對(duì)你的Struts行為進(jìn)行白色盒子測(cè)試-通過在調(diào)用行為后建立請(qǐng)求參數(shù)并檢查結(jié)果Request或session的狀態(tài)。

  StrutsTestCase答應(yīng)或者是一個(gè)模擬測(cè)試方式-這時(shí)框架模擬web服務(wù)器容器,或者是一個(gè)容器內(nèi)方式-這時(shí)使用Cactus框架來從服務(wù)器容器(例如Tomcat)內(nèi)部運(yùn)行測(cè)試。一般地,我比較喜歡模擬測(cè)試方式,因?yàn)樗鼮檩p量級(jí)的且運(yùn)行更快些,并因此答應(yīng)較寬松的開發(fā)周期。
所有的StrutsTestCase單元測(cè)試類或者派生于MockStrutsTestCase以進(jìn)行模擬測(cè)試,或者派生于CactusStrutsTestCase以進(jìn)行容器內(nèi)測(cè)試。在此我們先討論模擬測(cè)試,因?yàn)樗筝^少的配置并且運(yùn)行較快些。

  三、實(shí)戰(zhàn)StrutsTestCase

  為了使用StrutsTestCase來測(cè)試這個(gè)行為,我們創(chuàng)建一個(gè)擴(kuò)展類MockStrutsTestCase的新類。這個(gè)類提供一系列方法來構(gòu)建一個(gè)模擬的HTTP請(qǐng)求,調(diào)用相應(yīng)的Struts行為以及一旦在行為完成時(shí)校驗(yàn)應(yīng)用程序狀態(tài)。

  可以設(shè)想有一個(gè)在線的具有多條件查找功能的住所數(shù)據(jù)庫。這個(gè)查找函數(shù)是通過/search.do行為實(shí)現(xiàn)的。這個(gè)行為將基于指定的條件完成一次多條件查找,并把結(jié)果列表放置在一個(gè)稱為results的請(qǐng)求范圍屬性中。例如,下列URL應(yīng)該顯示一個(gè)在法國的所有的住所結(jié)果列表:
/search.do?country=FR

  現(xiàn)在,假定我們想要使用一個(gè)測(cè)試驅(qū)動(dòng)的方式來實(shí)現(xiàn)這個(gè)方法。我們創(chuàng)建該行為類并更新Struts配置文件。我們還編制測(cè)試實(shí)例來測(cè)試(空的)這個(gè)行為類。通過使用一種嚴(yán)格的測(cè)試驅(qū)動(dòng)的開發(fā)方法,我們可以首先創(chuàng)建測(cè)試實(shí)例,然后實(shí)現(xiàn)代碼來匹配該測(cè)試實(shí)例。在實(shí)踐中,具體的順序可能因要測(cè)試的代碼而有所不同。

  起始的測(cè)試情形看去如下樣子:

public void testSearchByCountry() {
 setRequestPathInfo("/search.do");
 addRequestParameter("country", "FR");
 actionPerform();
}
  在此,我們建立要調(diào)用的路徑(setRequestPathInfo())并且添加一請(qǐng)求參數(shù)(addRequestParameter())。然后,我們用actionPerform()來調(diào)用行為類。這將驗(yàn)證Struts配置并且調(diào)用相應(yīng)的行動(dòng)類,但是將不測(cè)試該行為的實(shí)際所做。為此,我們需要驗(yàn)證行動(dòng)的結(jié)果。



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 临城县| 湛江市| 宁远县| 宁化县| 商水县| 永清县| 罗江县| 蓝山县| 许昌县| 广丰县| 宿松县| 南汇区| 曲麻莱县| 柏乡县| 德兴市| 信宜市| 大厂| 阿巴嘎旗| 美姑县| 迭部县| 吉林省| 东平县| 天祝| 濉溪县| 张家界市| 通城县| 临清市| 碌曲县| 莎车县| 佛教| 华亭县| 西安市| 扶风县| 金山区| 邢台县| 观塘区| 桂平市| 彭泽县| 海宁市| 闽清县| 苍山县|