測試的預先支援
本章涵蓋了 Spring 使用 Spring TestContext 框架對整合測試的提前(AOT)支援。
測試支援透過以下功能擴充套件了 Spring 的 核心 AOT 支援。
-
構建時檢測當前專案中所有使用 TestContext 框架載入
ApplicationContext的整合測試。-
為基於 JUnit Jupiter 和 JUnit 4 的測試類提供顯式支援,併為 TestNG 和其他使用 Spring 核心測試註解的測試框架提供隱式支援——只要測試使用為當前專案註冊的 JUnit Platform
TestEngine執行。
-
-
構建時 AOT 處理:當前專案中的每個獨特的測試
ApplicationContext都將 重新整理以進行 AOT 處理。 -
執行時 AOT 支援:在 AOT 執行時模式下執行時,Spring 整合測試將使用一個 AOT 最佳化的
ApplicationContext,該ApplicationContext透明地參與 上下文快取。
所有測試預設在 AOT 模式下啟用。但是,您可以透過使用 @DisabledInAotMode 註解來選擇性地停用整個測試類或單個測試方法在 AOT 模式下的執行。使用 JUnit Jupiter 時,您可以透過 Jupiter 的 @EnabledInNativeImage 和 @DisabledInNativeImage 註解選擇性地啟用或停用 GraalVM 本機映象中的測試。請注意,@DisabledInAotMode 也會在 GraalVM 本機映象中停用帶註解的測試類或測試方法,類似於 JUnit Jupiter 的 @DisabledInNativeImage 註解。
|
預設情況下,如果在構建時 AOT 處理過程中遇到錯誤,將丟擲異常,並且整個過程將立即失敗。 如果您希望在遇到錯誤後繼續進行構建時 AOT 處理,您可以停用 可以透過在命令列或構建指令碼中將名為 |
|
在 AOT 模式下,JPA 的 但是,自 Spring Framework 7.0 起,您可以使用 |
|
在 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 作為示例。