正如Juergen Hoeller在其宣佈Spring Framework 3.2 RC1釋出的博文中提到的那樣,Spring團隊在測試支援方面引入了一些令人興奮的新功能。最重要的是,我們為測試Web應用程式添加了一流的支援。[1]
請注意:這是一篇來自我的Swiftmind公司部落格的交叉釋出。
在這篇文章中,我們將首先介紹Spring Framework中一些通用的新測試功能,然後詳細討論對使用WebApplicationContext以及請求(request)和會話(session)作用域bean進行測試的支援。最後,我們將介紹對ApplicationContextInitializers的支援,並簡要討論使用應用程式上下文層次結構進行測試的路線圖。
Rossen Stoyanchev稍後將發表一篇詳細介紹新的Spring MVC Test框架的博文,該框架為測試Spring MVC應用程式提供了一流的支援。因此,請務必關注,因為它基於本文後面討論的基本Web測試支援。
通用新功能和更新
構建和依賴
spring-test模組現在基於並支援JUnit 4.10和TestNG 6.5.2構建,並且spring-test現在依賴於junit:junit-dep Maven工件而不是junit:junit,這意味著您可以完全控制對Hamcrest庫(例如,hamcrest-core、hamcrest-all等)的依賴。
泛型工廠方法
泛型工廠方法是使用Java泛型實現工廠方法設計模式的方法。以下是一些泛型工廠方法的示例簽名
public static <T> T mock(Class<T> clazz) { ... }
public static <T> T proxy(T obj) { ... }
在Spring配置中使用泛型工廠方法並非測試專用,但EasyMock.createMock(MyService.class)或Mockito.mock(MyService.class)等泛型工廠方法通常用於在測試應用程式上下文中為Spring bean建立動態模擬。例如,在Spring Framework 3.2之前,以下配置可能無法將OrderRepository自動裝配到OrderService中。原因在於,根據應用程式上下文中bean的初始化順序,Spring可能會將orderRepository bean的型別推斷為java.lang.Object而不是com.example.repository.OrderRepository。
<beans>
<!-- OrderService is autowired with OrderRepository -->
<context:component-scan base-package="com.example.service"/>
<bean id="orderRepository" class="org.easymock.EasyMock…