測試的預先支援
本章介紹 Spring TestContext 框架在整合測試中對 Spring 預先 (AOT) 支援的功能。
此測試支援擴充套件了 Spring 的核心 AOT 支援,增加了以下功能。
-
構建時檢測當前專案中使用 TestContext 框架載入 `ApplicationContext` 的所有整合測試。
-
提供對基於 JUnit Jupiter 和 JUnit 4 的測試類的顯式支援,以及對使用 Spring 核心測試註解的 TestNG 和其他測試框架的隱式支援 — 只要測試使用為當前專案註冊的 JUnit Platform `TestEngine` 執行即可。
-
-
構建時 AOT 處理:當前專案中的每個唯一測試 `ApplicationContext` 都將進行 AOT 處理重新整理。
-
執行時 AOT 支援:在 AOT 執行時模式下執行時,Spring 整合測試將使用一個 AOT 最佳化後的 `ApplicationContext`,它能透明地參與到上下文快取中。
預設情況下,在 AOT 模式下所有測試都是啟用的。但是,你可以透過使用@DisabledInAotMode
註解,在 AOT 模式下有選擇地停用整個測試類或單個測試方法。使用 JUnit Jupiter 時,你可以透過 Jupiter 的 @EnabledInNativeImage
和 @DisabledInNativeImage
註解,有選擇地在 GraalVM 原生映象中啟用或停用測試。請注意,當在 GraalVM 原生映象中執行時,@DisabledInAotMode
也將停用被註解的測試類或測試方法,類似於 JUnit Jupiter 的 @DisabledInNativeImage
註解。
預設情況下,如果在構建時 AOT 處理期間遇到錯誤,將丟擲異常,並且整個過程會立即失敗。 如果你希望構建時 AOT 處理在遇到錯誤後繼續進行,可以停用 可以透過命令列或構建指令碼設定名為 |
在 AOT 模式下不支援 |
要在 GraalVM 原生映象中為測試提供特定的執行時提示,你有以下選項。
-
實現自定義的
TestRuntimeHintsRegistrar
並透過META-INF/spring/aot.factories
進行全域性註冊。 -
實現自定義的
RuntimeHintsRegistrar
並透過META-INF/spring/aot.factories
進行全域性註冊,或者透過@ImportRuntimeHints
在測試類上進行本地註冊。 -
使用
@Reflective
或@RegisterReflectionForBinding
註解測試類。 -
有關 Spring 核心執行時提示和註解支援的詳細資訊,請參閱執行時提示。
|
如果你實現自定義的 ContextLoader
,它必須實現 AotContextLoader
以提供 AOT 構建時處理和 AOT 執行時執行支援。但是請注意,Spring Framework 和 Spring Boot 提供的所有上下文載入器實現都已實現 AotContextLoader
。
如果你實現自定義的 TestExecutionListener
,它必須實現 AotTestExecutionListener
以參與 AOT 處理。請參閱 spring-test
模組中的 SqlScriptsTestExecutionListener
作為示例。