使用 Context Customizer 進行上下文配置
ContextCustomizer 負責在 bean 定義載入到上下文後但在上下文重新整理之前定製所提供的 ConfigurableApplicationContext。
ContextCustomizerFactory 負責建立 ContextCustomizer,基於一些自定義邏輯來確定 ContextCustomizer 對於給定的測試類是否必要——例如,基於某個註解的存在。工廠在 ContextLoader 處理測試類的上下文配置屬性之後,但在建立 MergedContextConfiguration 之前被呼叫。
例如,Spring Framework 提供了以下預設註冊的 ContextCustomizerFactory 實現
MockServerContainerContextCustomizerFactory-
如果在 classpath 中存在 WebSocket 支援並且測試類或其任何封閉類被
@WebAppConfiguration註解或元註解,則建立一個MockServerContainerContextCustomizer。MockServerContainerContextCustomizer例項化一個新的MockServerContainer並將其儲存在ServletContext中,屬性名為jakarta.websocket.server.ServerContainer。
註冊 ContextCustomizerFactory 實現
您可以使用 @ContextCustomizerFactories 註解為測試類、其子類及其巢狀類顯式註冊 ContextCustomizerFactory 實現。有關詳細資訊和示例,請參閱註解支援以及 @ContextCustomizerFactories 的 javadoc。
自動發現預設 ContextCustomizerFactory 實現
使用 @ContextCustomizerFactories 註冊 ContextCustomizerFactory 實現適用於在有限測試場景中使用的自定義工廠。但是,如果自定義工廠需要在整個測試套件中使用,它可能會變得很麻煩。此問題透過支援透過 SpringFactoriesLoader 機制自動發現預設 ContextCustomizerFactory 實現來解決。
例如,構成 Spring Framework 和 Spring Boot 測試支援的模組在其 META-INF/spring.factories 屬性檔案中,在 org.springframework.test.context.ContextCustomizerFactory 鍵下宣告所有核心預設 ContextCustomizerFactory 實現。spring-test 模組的 spring.factories 檔案可以在此處檢視。第三方框架和開發人員可以透過自己的 spring.factories 檔案以相同的方式將自己的 ContextCustomizerFactory 實現貢獻到預設工廠列表中。
合併 ContextCustomizerFactory 實現
如果透過 @ContextCustomizerFactories 註冊了自定義 ContextCustomizerFactory,它將與使用上述自動發現機制註冊的預設工廠合併。
合併演算法確保從列表中刪除重複項,並在合併時將本地宣告的工廠附加到預設工廠列表的末尾。
|
要替換測試類、其子類及其巢狀類的預設工廠,您可以將 |