使用 Context Customizer 進行上下文配置

ContextCustomizer 負責在 bean 定義載入到上下文後但在上下文重新整理之前定製所提供的 ConfigurableApplicationContext

ContextCustomizerFactory 負責建立 ContextCustomizer,基於一些自定義邏輯來確定 ContextCustomizer 對於給定的測試類是否必要——例如,基於某個註解的存在。工廠在 ContextLoader 處理測試類的上下文配置屬性之後,但在建立 MergedContextConfiguration 之前被呼叫。

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

MockServerContainerContextCustomizerFactory

如果在 classpath 中存在 WebSocket 支援並且測試類或其任何封閉類被 @WebAppConfiguration 註解或元註解,則建立一個 MockServerContainerContextCustomizerMockServerContainerContextCustomizer 例項化一個新的 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,它將與使用上述自動發現機制註冊的預設工廠合併

合併演算法確保從列表中刪除重複項,並在合併時將本地宣告的工廠附加到預設工廠列表的末尾。

要替換測試類、其子類及其巢狀類的預設工廠,您可以將 @ContextCustomizerFactoriesmergeMode 屬性設定為 MergeMode.REPLACE_DEFAULTS

© . This site is unofficial and not affiliated with VMware.