搭配 Context Customizers 的組態設定

ContextCustomizer 負責在 Bean 定義載入到 context 之後,但在 context 重新整理之前,自訂提供的 ConfigurableApplicationContext

ContextCustomizerFactory 負責建立 ContextCustomizer,其基於一些自訂邏輯,以判斷給定的測試類別是否需要 ContextCustomizer — 例如,基於特定註解的存在。在 ContextLoaders 處理了測試類別的 context 組態屬性之後,但在建立 MergedContextConfiguration 之前,會調用 Factory。

例如,Spring Framework 提供了以下 ContextCustomizerFactory 實作,預設已註冊

MockServerContainerContextCustomizerFactory

如果 WebSocket 支援存在於類別路徑中,且測試類別或其封閉類別之一使用 @WebAppConfiguration 進行註解或元註解,則建立 MockServerContainerContextCustomizerMockServerContainerContextCustomizer 實例化新的 MockServerContainer,並將其儲存在 ServletContext 中,屬性名稱為 jakarta.websocket.server.ServerContainer

註冊 ContextCustomizerFactory 實作

您可以使用 @ContextCustomizerFactories 註解,為測試類別、其子類別和其巢狀類別明確註冊 ContextCustomizerFactory 實作。請參閱 註解支援 以及 @ContextCustomizerFactories 的 javadoc,以取得詳細資訊和範例。

自動探索預設 ContextCustomizerFactory 實作

使用 @ContextCustomizerFactories 註冊 ContextCustomizerFactory 實作適用於在有限的測試情境中使用的自訂 Factory。但是,如果需要在整個測試套件中使用自訂 Factory,則可能會變得繁瑣。此問題透過支援自動探索預設 ContextCustomizerFactory 實作來解決,方法是透過 SpringFactoriesLoader 機制。

例如,構成 Spring Framework 和 Spring Boot 中測試支援的模組,在其 META-INF/spring.factories 屬性檔案中的 org.springframework.test.context.ContextCustomizerFactory 金鑰下,宣告所有核心預設 ContextCustomizerFactory 實作。spring-test 模組的 spring.factories 檔案可以在此處檢視。第三方框架和開發人員可以透過他們自己的 spring.factories 檔案,以相同的方式將他們自己的 ContextCustomizerFactory 實作貢獻到預設 Factory 列表中。

合併 ContextCustomizerFactory 實作

如果透過 @ContextCustomizerFactories 註冊自訂 ContextCustomizerFactory,它將與使用前述自動探索機制註冊的預設 Factory 合併

合併演算法確保從列表中刪除重複項,並且在合併時,本機宣告的 Factory 會附加到預設 Factory 列表中。

若要取代測試類別、其子類別和其巢狀類別的預設 Factory,您可以將 @ContextCustomizerFactoriesmergeMode 屬性設定為 MergeMode.REPLACE_DEFAULTS