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