?
Dieses Dokument verwendet PHP-Handbuch für chinesische Websites Freigeben
采用依賴注射的一個(gè)主要好處是你的代碼對(duì)容器的依賴將比傳統(tǒng)J2EE開(kāi)發(fā)小的多。無(wú)需Spring或任何其他容器,只要簡(jiǎn)單地通過(guò) new
操作符即可實(shí)例化對(duì)象,通過(guò)這種方式,組成你應(yīng)用的POJO對(duì)象就可以使用JUnit或TestNG進(jìn)行測(cè)試了。你可以使用Mock對(duì)象(或者其他很多有價(jià)值的測(cè)試技術(shù)來(lái)進(jìn)行隔離測(cè)試)。如果你的應(yīng)用在架構(gòu)上遵循了Spring的建議,那么你的代碼將會(huì)有清晰的層次和高度的模塊化,這些都將大大方便單元測(cè)試。例如,在單元測(cè)試中你可以通過(guò)stub(占位)或者mock(模仿)DAO或者Repository(庫(kù))接口的方式,來(lái)測(cè)試服務(wù)層對(duì)象,而無(wú)需訪問(wèn)持久化數(shù)據(jù)。
真正的單元測(cè)試運(yùn)行起來(lái)通常都非常迅速,因?yàn)闆](méi)有應(yīng)用服務(wù)器,數(shù)據(jù)庫(kù),ORM工具等運(yùn)行設(shè)施需要設(shè)置。因此在你的開(kāi)發(fā)方法論中,正確對(duì)待單元測(cè)試可以大大提高你的生產(chǎn)力。如果你有一些基于IoC的應(yīng)用,那通常并不需要專門(mén)的一章“測(cè)試”來(lái)幫助你編寫(xiě)有效的 單元 測(cè)試。但為了一些特定的單元測(cè)試場(chǎng)景,Spring框架提供了如下mock對(duì)象和測(cè)試支持類:
org.springframework.mock.jndi
包里有一個(gè)JNDI SPI的實(shí)現(xiàn),它可以用來(lái)搭建一個(gè)為測(cè)試套件或單機(jī)應(yīng)用所使用的簡(jiǎn)單JNDI環(huán)境。例如,與相同的JNDI名稱綁定的測(cè)試代碼中的<font></font>JDBC DataSource
,就像在J2EE容器中一樣,應(yīng)用代碼和配置都可以無(wú)需修改在測(cè)試場(chǎng)景重用。
org.springframework.mock.web
包有一組Servlet API 的很詳盡的mock對(duì)象,主要面向Spring Web MVC 框架,能方便的測(cè)試web上下文和控制器。這些mock對(duì)象通常比使用動(dòng)態(tài)mock對(duì)象更方便(例如 EasyMock) 或已有的Servlet API mock對(duì)象(如 MockObjects).
org.springframework.test.util
包內(nèi)有ReflectionTestUtils
。
它是基于反射的工具方法集,用在單元測(cè)試和集成測(cè)試場(chǎng)景中。開(kāi)發(fā)者可以在測(cè)試應(yīng)用代碼時(shí),設(shè)置非public
的字段或者調(diào)用非public
的 setter方法,例如:
ORM框架如JPA和Hibernate能夠使用 public
Setter方法訪問(wèn)private
或protected
字段以獲得一個(gè)域?qū)嵗膶傩?/p>
Spring支持如@Autowired
和@Resource
注解來(lái)提供private
或protected
字段、setter方法和配置方法的依賴注入
org.springframework.test.web
包含有AbstractModelAndViewTests
類,它可以作為基于JUnit 3.8的單元測(cè)試基類來(lái)處理Spring MVC ModelAndView
對(duì)象。當(dāng)基于Java 1.4 或更高的版本(例如與JUnit 4+, TestNG等綁定)時(shí),你可以選擇使用ModelAndViewAssert
類(在相同包中)來(lái)測(cè)試 ModelAndView
相關(guān)功能。
提示: 根據(jù)你的測(cè)試環(huán)境,可以擴(kuò)展
AbstractModelAndViewTests
或直接使用
ModelAndViewAssert
,然后使用
MockHttpServletRequest
,
MockHttpSession
等。這些類在org.springframework.mock.web
包中,用來(lái)測(cè)試Spring MVC Controller
.