測試的預先 (Ahead of Time) 支援
本章涵蓋 Spring 的預先 (Ahead of Time, AOT) 支援,用於使用 Spring TestContext 框架的整合測試。
此測試支援透過以下功能擴展 Spring 的核心 AOT 支援。
-
在目前專案中建置時偵測所有使用 TestContext 框架載入
ApplicationContext
的整合測試。-
為基於 JUnit Jupiter 和 JUnit 4 的測試類別提供明確的支援,以及為 TestNG 和其他使用 Spring 核心測試註解的測試框架提供隱含的支援 — 只要測試是使用已為目前專案註冊的 JUnit Platform
TestEngine
執行即可。
-
-
建置時 AOT 處理:目前專案中的每個唯一測試
ApplicationContext
都將重新整理以進行 AOT 處理。 -
執行階段 AOT 支援:在 AOT 執行階段模式下執行時,Spring 整合測試將使用 AOT 優化的
ApplicationContext
,該容器與context 快取透明地協作。
預設情況下,所有測試都在 AOT 模式下啟用。但是,您可以透過使用 @DisabledInAotMode
註解來選擇性地停用整個測試類別或個別測試方法在 AOT 模式下的執行。當使用 JUnit Jupiter 時,您可以透過 Jupiter 的 @EnabledInNativeImage
和 @DisabledInNativeImage
註解,選擇性地在 GraalVM native image 中啟用或停用測試。請注意,當在 GraalVM native image 中執行時,@DisabledInAotMode
也會停用已註解的測試類別或測試方法,這與 JUnit Jupiter 的 @DisabledInNativeImage
註解類似。
預設情況下,如果在建置時 AOT 處理期間遇到錯誤,將會拋出例外,且整體流程將立即失敗。 如果您希望在遇到錯誤後繼續進行建置時 AOT 處理,您可以停用 可以從命令列或建置腳本停用 |
AOT 模式下不支援 |
為了為 GraalVM native image 中的使用提供測試特定的執行階段提示,您有以下選項。
-
實作自訂
TestRuntimeHintsRegistrar
,並透過META-INF/spring/aot.factories
全域註冊它。 -
實作自訂
RuntimeHintsRegistrar
,並透過META-INF/spring/aot.factories
全域註冊它,或透過@ImportRuntimeHints
在測試類別上本機註冊它。 -
使用
@Reflective
或@RegisterReflectionForBinding
註解測試類別。 -
有關 Spring 核心執行階段提示和註解支援的詳細資訊,請參閱執行階段提示。
|
如果您實作自訂 ContextLoader
,它必須實作 AotContextLoader
,以便提供 AOT 建置時處理和 AOT 執行階段執行支援。但是請注意,Spring Framework 和 Spring Boot 提供的所有 context loader 實作都已實作 AotContextLoader
。
如果您實作自訂 TestExecutionListener
,它必須實作 AotTestExecutionListener
,以便參與 AOT 處理。有關範例,請參閱 spring-test
模組中的 SqlScriptsTestExecutionListener
。