混合使用 XML、Groovy 指令碼和元件類
有時,可能需要混合使用 XML 配置檔案、Groovy 指令碼和元件類(通常是 @Configuration 類)來配置測試的 ApplicationContext。例如,如果在生產環境中使用 XML 配置,您可能會決定使用 @Configuration 類來為測試配置特定的 Spring 管理元件,反之亦然。
此外,一些第三方框架(例如 Spring Boot)為同時從不同型別的資源載入 ApplicationContext 提供了優先支援(例如,XML 配置檔案、Groovy 指令碼和 @Configuration 類)。Spring Framework 在歷史上並未支援標準部署的這種方式。因此,Spring Framework 在 spring-test 模組中提供的大多數 SmartContextLoader 實現都只支援每個測試上下文的一種資源型別。然而,這並不意味著您不能同時使用它們。一個例外是 GenericGroovyXmlContextLoader 和 GenericGroovyXmlWebContextLoader 同時支援 XML 配置檔案和 Groovy 指令碼。此外,第三方框架可以選擇透過 @ContextConfiguration 支援 locations 和 classes 的宣告,並且,在 TestContext 框架中,您可以透過標準測試支援獲得以下選項。
如果要使用資源位置(例如,XML 或 Groovy)和 @Configuration 類來配置測試,則必須選擇其中一個作為入口點,並且該入口點必須包含或匯入另一個。例如,在 XML 或 Groovy 指令碼中,您可以透過使用元件掃描或將其定義為正常的 Spring Bean 來包含 @Configuration 類,而在 @Configuration 類中,您可以使用 @ImportResource 來匯入 XML 配置檔案或 Groovy 指令碼。請注意,此行為在語義上等同於您在生產環境中配置應用程式的方式:在生產配置中,您可以定義一組 XML 或 Groovy 資源位置或一組 @Configuration 類,從中載入生產 ApplicationContext,但您仍然可以自由地包含或匯入其他型別的配置。