14.單元測試

14.單元測試

依賴注入讓你的代碼更少地依賴容器,這不同於傳統的Java EE開發。組成應用程序的POJO應當能在JUnit或TestNG測試框架中進行測試,對象只需使用new運算符實例化,而無需Spring或任何其他容器。開發者可以使用mock對象(第14.1節)(與其他有用的測試技術協同) 來隔離測試代碼。如果遵循Spring的體系結構的建議,那麼編寫層次清晰和組件化的代碼能更便於單元測試。例如,可以通過tubbing、mock DAO或Repository接口對服務層對象進行測試,而無需在運行單元測試時訪問持久化數據。
真正的單元測試一般都運行得飛快,因爲在運行時無需再作配置。將這種真正的單元測試作爲開發方法的一部分能提高開發者的效率。也許你無需閱讀“測試”這一章節來幫助你編寫基於IoC的單元測試。但是,對於某些單元測試方案,Sping框架提供了以下mock對象和測試支持類。

14.1 mock對象

14.1.1 環境

org.springframework.mock.env包包含環境和PropertySource抽象的mock實現(請參看第7.13.1節“bean定義的profiles”和第7.13.2節“PropertySource抽象”)。MockEnvironmentMockPropertySource對於開發依賴於環境特定屬性的代碼的外測試非常有用。

14.1.2 JNDI

org.springframework.mock.jndi包中包含JNDI SPI的實現,開發者可以使用該實現爲測試套件或獨立應用程序設置簡單的JNDI環境。例如,如果JDBC DataSources在測試代碼與Java EE容器中的JNDI名稱綁定到相同的名稱,那麼可以在測試場景中複用應用程序代碼和配置,而無需進行修改。

14.1.3 Servlet API

org.springframework.mock.web包包含一組全面的Servlet API mock對象,這些對象有用於測試Web上下文、控制器和過濾器。這些mock對象是針對Spring Web MVC框架使用的,通常比動態mock對象(例如easymock)或其他Servlet API mock對象(例如MockObjects)更方便。從Spring 4.0框架開始, org.springframework.mock.web包中的一組mock基於Servlet 3.0 API。
有關Spring MVC和REST控制器與Spring MVC的WebApplicationContext配置進行全面集成測試,請參看Spring MVC Test Framework(第15.6節)。

14.2 單元測試支持類

14.2.1 通用的測試工具

org.springframework.test.util包包含一些用於單元和集成測試的通用工具。
ReflectionTestUtils是基於反射的工具方法集合。開發者在測試需要更改常量值、設置非公共字段、調用非公共 setter 方法或調用非公共配置或生命週期回調方法的場景中,在涉及測試用例的應用程序代碼時,都可以使用這些方法。

  1. ORM框架(例如JPA和Hibernate)用到private或protected的字段訪問,而不是在公共的setter方法設置實體屬性。
  2. Spring對註解的支持(例如@Autowired、@Inject和@Resource等)爲聲明爲private或protected的字段、setter方法和配置方法提供依賴注入。
  3. 使用註解(例如@PostConstruct和@PreDestroy等)用於生命週期的回調方法。

AopTestUtils是與AOP相關的工具方法集合。這些方法可用於獲取對隱藏在一個或多個Spring代理後面的底層目標對象的引用。例如,如果已經使用EasyMock或Mockito等庫將bean配置爲動態mock,並且包裝在Spring代理中,當需要直接訪問它們判斷配置是否正確或執行驗證時,這些方法就派上用場。有關Spring的核心AOP實用工具,請參看AopUtilsAopProxyUtils

14.2.2 Spring MVC

org.springframework.test.web包包含ModelAndViewAssert,開發者可以將它配合JUnitTestNG或其他測試框架一起使用,用於處理Spring MVC ModelAndView對象的單元測試。

提示:如果想將Spring MVC Controller作爲POJO進行單元測試,請在Spring的Servlet API Mocks(第14.1.3節)中將ModelAndViewAssert配合 MockHttpServletRequestMockHttpSession等框架一起使用。有關Spring MVC和REST控制器與Spring MVC的 WebApplicationContext配置進行全面集成測試,請改用Spring MVC測試框架(第15.6節)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章