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

您的位置:軟件測試 > 開源軟件測試 > 開源軟件測試解決方案 > 開源測試工具組合
使用StrutsTestCase進行測試驅動開發
作者:網絡轉載 發布時間:[ 2012/12/11 15:15:05 ] 推薦標簽:

StrutsTestCase是用于測試Struts動作的強大易用的測試框架。結合傳統的JUnit測試,Struts及StrutsTestCase將為您提供高覆蓋率的測試,從而提高產品可靠性。

        StrutsTestCase是基于JUnit的Struts動作測試框架。Struts將為測試應用程序的Struts動作類提供簡便有效的方法。

        典型的J2EE應用程序是分層構建的,其結構如圖1所示:

◆DAO層封裝數據庫訪問。其中包括Hibernate映射、Object類、Hibernate查詢、實體EJB或其他實體-關系持久化技術。
◆業務層包含更多高級業務服務。理想狀態下,業務層相對獨立于數據庫實現。這一層常常用到EJB事務。
◆表示層向用戶展示應用程序數據,并解釋用戶請求。在Struts應用程序中,該層通常使用JSP/JSTL頁面顯示數據,并借助于Struts動作解釋用戶的查詢請求。
◆客戶端層主要是用戶機器上運行的web瀏覽器?蛻舳诉壿嫞ū热鏙avaScript)有時候置于該層,盡管很難對其進行有效的測試。

        視具體架構,DAO及業務層可使用JUnit經典測試法或者各種JUnit擴展工具進行測試。DbUnit是進行數據庫單元測試的好選擇。

        另一方面,通常很難對Struts動作進行測試。即使業務邏輯完全限定于業務層,Struts動作通常還是會包含重要的數據驗證、數據轉換和數據流控制代碼。如果不對Struts動作進行測試,那么將在代碼覆蓋率方面留下很大空白。而StrutsTestCase將填補這些空白。

        對動作層進行單元測試還會帶來其他的一些好處:

◆視圖層及控制層設計起來更容易,通常也更為簡潔明了。
◆更易于重構動作類。
◆有助于避免冗余和無用的動作類。
◆測試用例有助于編寫動作層文檔,這些文檔在編寫JSP頁面時可以起到幫助作用。
        這些是測試驅動開發的一些常見優點,這些優點適用于Struts動作層,也適用于其他的一些地方。

StrutsTestCase簡介

        StrutsTestCase提供了在JUnit框架內測試Struts動作的靈活便利的方法。可以通過設置請求參數并檢查調用動作后生成的Request或Session狀態的方式,來對Struts動作進行白盒測試。

        StrutsTestCase支持使用框架來模擬web服務器容器的模擬測試方法,或者在服務器容器(如Tomcat)內使用Cactus框架進行測試的容器內測試方法。一般來說,我更喜歡模擬測試方法,因為這種方法更為輕量級,運行更快,從而可以實現更緊湊的開發周期。

        所有StrutsTestCase單元測試類均由模擬測試的MockStrutsTestCase或者容器內測試的CactusStrutsTestCase派生。由于模擬測試方法設置更簡單,運行更快,所以在這里我們將主要關注模擬測試方法。

StrutsTestCase實踐

        為了使用StrutsTestCase測試該動作,我們將創建一個擴展MockStrutsTestCase類的新類。該類提供一些方法,用于構建模擬HTTP請求,調用相應的Struts動作,并在動作完成后驗證應用程序的狀態。

        設想一個用于安排住宿的在線數據庫,它帶有一個復合條件搜索函數。搜索函數通過/search.do動作來實現。該動作將根據特定條件執行復合條件搜索,并將搜索結果列表置于名為results的屬性中,該屬性的作用域為請求范圍內。比如,下面的URL將會顯示法國的所有住宿地列表。

/search.do?country=FR

        現在假設我們使用測試驅動方法來實現該方法。編寫動作類,更新Struts配置文件。編寫測試用例,測試該動作類(空)。采用嚴格的測試驅動開發方法,首先編寫測試用例,再實現符合測試用例的代碼。在實際情況中,具體順序視測試代碼不同而有所不同。

        初始的測試用例看起來應該如下:

public void testSearchByCountry() {
setRequestPathInfo("/search.do");
addRequestParameter("country", "FR");
actionPerform();
}
        在這里,我們設置調用路徑(setRequestPathInfo()),并添加請求參數(addRequestParameter())。

        接下來,使用調用動作類。這樣將會驗證Struts配置并調用相應的動作類,但是并不會對動作的實際功能進行測試。為了測試動作的實際功能,我們需要驗證動作結果。

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

軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 一个人看的www视频免费观看 | 美国人成毛片在线播放 | 国产婷婷综合丁香亚洲欧洲 | 成人黄网18免费观看的网站 | 亚洲第一视频网 | 日韩在线观看你懂的 | 我把寡妇日出水好爽视频 | 久久精品无码一区二区日韩av | 午夜影院a级片 | 亚洲欧美韩国日产综合在线 | 国产小视频在线高清播放 | 又黄又爽又色的性视频 | 欧美一级手机免费观看片 | 一级做a爰片久久毛片武则天 | 国产福利不卡 | 国产精品一区二区手机看片 | 中文字幕日韩亚洲 | 日日天天| 黄色片地址 | 免费一级毛片在线观看 | 亚洲综合一区二区三区四区 | 国产成人综合久久精品亚洲 | 国产成人精品综合在线观看 | 最近最好看2019年中文字幕 | 美女网站在线观看视频18 | 欧美日韩一区二区视频免费看 | 色原网站 | 就草草在线观看视频 | 亚洲an日韩专区在线 | 一区二区视频在线免费观看 | 日日综合 | 奇米影视亚洲狠狠色777不卡 | 欧美国产中文 | 欧美一级日韩一级 | 深夜国产成人福利在线观看女同 | 日韩在线观看一区二区不卡视频 | 成熟女人50岁一级毛片不卡 | 色偷偷亚洲第一成人综合网址 | 手机在线毛片免费播放 | 欧美日韩在线精品成人综合网 | 特黄色一级毛片 |