正如 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 建立動態 Mock。例如,在 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…