混合 XML、Groovy 腳本和組件類別

有時可能需要混合 XML 組態檔、Groovy 腳本和組件類別(通常是 @Configuration 類別),以為您的測試配置 ApplicationContext。例如,如果您在生產環境中使用 XML 組態,您可以決定使用 @Configuration 類別來為您的測試配置特定的 Spring 管理組件,反之亦然。

此外,某些第三方框架(例如 Spring Boot)提供一流的支援,可同時從不同類型的資源載入 ApplicationContext(例如,XML 組態檔、Groovy 腳本和 @Configuration 類別)。Spring Framework 歷史上並未在標準部署中支援此功能。因此,Spring Framework 在 spring-test 模組中交付的大多數 SmartContextLoader 實作,每個測試 Context 僅支援一種資源類型。但是,這並不表示您不能同時使用兩者。一般規則的一個例外是 GenericGroovyXmlContextLoaderGenericGroovyXmlWebContextLoader 同時支援 XML 組態檔和 Groovy 腳本。此外,第三方框架可能會選擇透過 @ContextConfiguration 支援宣告 locationsclasses,並且透過 TestContext Framework 中的標準測試支援,您有以下選項。

如果您想要使用資源位置(例如,XML 或 Groovy)和 @Configuration 類別來配置您的測試,您必須選擇其中一個作為進入點,並且該進入點必須包含或匯入另一個。例如,在 XML 或 Groovy 腳本中,您可以使用組件掃描或將 @Configuration 類別定義為一般 Spring Bean 來包含它們,而在 @Configuration 類別中,您可以使用 @ImportResource 來匯入 XML 組態檔或 Groovy 腳本。請注意,此行為在語意上等同於您在生產環境中配置應用程式的方式:在生產組態中,您定義一組 XML 或 Groovy 資源位置,或一組 @Configuration 類別,您的生產環境 ApplicationContext 從中載入,但您仍然可以自由地包含或匯入其他類型的組態。