搭配 Context Customizers 的組態設定
ContextCustomizer
負責在 Bean 定義載入到 context 之後,但在 context 重新整理之前,自訂提供的 ConfigurableApplicationContext
。
ContextCustomizerFactory
負責建立 ContextCustomizer
,其基於一些自訂邏輯,以判斷給定的測試類別是否需要 ContextCustomizer
— 例如,基於特定註解的存在。在 ContextLoaders
處理了測試類別的 context 組態屬性之後,但在建立 MergedContextConfiguration
之前,會調用 Factory。
例如,Spring Framework 提供了以下 ContextCustomizerFactory
實作,預設已註冊
MockServerContainerContextCustomizerFactory
-
如果 WebSocket 支援存在於類別路徑中,且測試類別或其封閉類別之一使用
@WebAppConfiguration
進行註解或元註解,則建立MockServerContainerContextCustomizer
。MockServerContainerContextCustomizer
實例化新的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,您可以將 |