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

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

基于mock對(duì)象和JUnit框架簡(jiǎn)化Spring Web組件單元測(cè)試(1)

2019-11-18 11:16:30
字體:
供稿:網(wǎng)友

對(duì)于java組件開發(fā)者來說,他們都盼望擁有一組能夠?qū)M件開發(fā)提供全面測(cè)試功能的好用的單元測(cè)試。一直以來,與測(cè)試獨(dú)立的Java對(duì)象相比,測(cè)試傳統(tǒng)型J2EE Web組件是一項(xiàng)更為困難的任務(wù),因?yàn)閃eb組件必須運(yùn)行在某種服務(wù)器平臺(tái)上并且它們還要與基于HTTP的Web交互細(xì)節(jié)相聯(lián)系。

易測(cè)性(在框架中測(cè)試每個(gè)組件而不管其具體種類)是SPRing框架所提倡的要害原則之一。從這一角度看,Spring是對(duì)核心J2EE模型的一個(gè)重大改進(jìn)—在以前情況下,在容器外進(jìn)行組件測(cè)試是很難實(shí)現(xiàn)的,而且即使是容器內(nèi)測(cè)試也往往要求復(fù)雜的安裝過程。

本文正是想集中探討Spring的易測(cè)性特征—它能使得對(duì)Web組件進(jìn)行單元測(cè)試就象測(cè)試普通Java對(duì)象(POJO)一樣輕易。

一、Spring Mock類簡(jiǎn)介

Mock對(duì)象是一個(gè)術(shù)語,原來主要流行于eXtreme程序員和JUnit小組中。在單元測(cè)試上下文中,一個(gè)mock對(duì)象是指這樣的一個(gè)對(duì)象——它能夠用一些“虛構(gòu)的占位符”功能來“模擬”實(shí)現(xiàn)一些對(duì)象接口。在測(cè)試過程中,這些虛構(gòu)的占位符對(duì)象可用簡(jiǎn)單方式來模擬對(duì)于一個(gè)組件的期望的行為和結(jié)果,從而讓你專注于組件本身的徹底測(cè)試而不用擔(dān)心其它依靠性問題。

Spring從J2EE的Web端為每個(gè)要害接口提供了一個(gè)mock實(shí)現(xiàn):

MockHttpServletRequest—幾乎每個(gè)單元測(cè)試中都要使用這個(gè)類,它是J2EE Web應(yīng)用程序最常用的接口HttpServletRequest的mock實(shí)現(xiàn)。

MockHttpServletResponse—此對(duì)象用于HttpServletResponse接口的mock實(shí)現(xiàn)。

MockHttpsession—這是另外一個(gè)經(jīng)常使用的mock對(duì)象(后文將討論此類在會(huì)話綁定處理中的應(yīng)用)。

DelegatingServletInputStream—這個(gè)對(duì)象用于ServletInputStream接口的mock實(shí)現(xiàn)。

DelegatingServletOutputStream—這個(gè)對(duì)象將代理ServletOutputStream實(shí)現(xiàn)。在需要攔截和分析寫向一個(gè)輸出流的內(nèi)容時(shí),你可以使用它。

總之,在實(shí)現(xiàn)你自己的測(cè)試控制器時(shí),上面這些對(duì)象是最為有用的。然而,Spring也提供了下列相應(yīng)于其它不太常用的組件的mock實(shí)現(xiàn)(假如你是一個(gè)底層API開發(fā)者,那么你可能會(huì)找到其各自的相應(yīng)用法):

MockEXPressionEvaluator—這個(gè)mock對(duì)象主要應(yīng)用于你想開發(fā)并測(cè)試你自己的基于JSTL的標(biāo)簽庫時(shí)。

MockFilterConfig—這是FilterConfig接口的一個(gè)mock實(shí)現(xiàn)。

MockPageContext—這是jsp PageContext接口的一個(gè)mock實(shí)現(xiàn)。你會(huì)發(fā)現(xiàn)這個(gè)對(duì)象的使用有利于測(cè)試預(yù)編譯的JSP。

MockRequestDispatcher—RequestDispatcher接口的一個(gè)mock實(shí)現(xiàn),你主要在其它mock對(duì)象內(nèi)使用它。

MockServletConfig—這是ServletConfig接口的一個(gè)mock實(shí)現(xiàn)。在單元測(cè)試某種Web組件(例如Struts框架所提供的Web組件)時(shí),要求你設(shè)置由MockServletContext所實(shí)現(xiàn)的ServletConfig和ServletContext接口。

那么,我們?cè)撊绾问褂眠@些mock對(duì)象呢?我們知道,HttpServletRequest是一個(gè)持有描述HTTP參數(shù)的固定值的組件,而正是這些參數(shù)驅(qū)動(dòng)Web組件的功能。MockHttpServletRequest,作為HttpServletRequest接口的一個(gè)實(shí)現(xiàn),答應(yīng)你設(shè)置這些不可改變的參數(shù)。在典型的Web組件測(cè)試情形下,你可以實(shí)例化這個(gè)對(duì)象并按如下方式設(shè)置其中的任何參數(shù):

//指定表單方法和表單行為

MockHttpServletRequest request = new MockHttpServletRequest("GET", "/main.app");

request.addParameter("choice", expanded);

request.addParameter("contextMenu", "left");

同樣地,你可以實(shí)例化并全面地控制和分析HttpResponse和HttpSession對(duì)象。接下來,讓我們簡(jiǎn)要觀察Spring所提供的特定的JUnit框架擴(kuò)展。

二、JUnit框架擴(kuò)展

Spring提供了下列一些特定的JUnit框架擴(kuò)展:

AbstractDependencyInjectionSpringContextTests—這是一個(gè)針對(duì)所有測(cè)試的超類,其具體使用依靠于Spring上下文。

AbstractSpringContextTests—這是一個(gè)針對(duì)所有的JUnit測(cè)試情形的超類。它使用一個(gè)Spring上下文。并且,一般在測(cè)試中不是直接使用它,而是使用AbstractDependencyInjectionSpringContextTests或者AbstractTransactionalSpringContextTests這樣的派生類。

AbstractTransactionalSpringContextTests—這是一個(gè)針對(duì)所有測(cè)試的超類,我們一般把它應(yīng)用在事務(wù)相關(guān)的測(cè)試中。注重,一旦完成每個(gè)測(cè)試它就會(huì)正常地回滾事務(wù);而且你需要重載onSetUpInTransaction和onTearDownInTransaction方法以便手工開始并提交事務(wù)。



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 西贡区| 周至县| 库车县| 富宁县| 临高县| 广西| 六安市| 拜城县| 越西县| 吉木萨尔县| 闸北区| 韶关市| 调兵山市| 马龙县| 乌兰浩特市| 中山市| 万载县| 北辰区| 临武县| 永春县| 乐陵市| 成安县| 大埔县| 黄大仙区| 宁德市| 祁东县| 冕宁县| 宁津县| 嘉兴市| 海口市| 堆龙德庆县| 当雄县| 绥棱县| 巴彦淖尔市| 阿坝县| 绍兴市| 灵丘县| 东安县| 社旗县| 蒲江县| 独山县|