測試的預先支援

本章涵蓋了 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 處理,您可以停用 failOnError 模式,這將導致錯誤以 WARN 級別記錄,或以 DEBUG 級別記錄更詳細的資訊。

可以透過在命令列或構建指令碼中將名為 spring.test.aot.processing.failOnError 的 JVM 系統屬性設定為 false 來停用 failOnError 模式。作為替代方案,您可以透過 SpringProperties 機制設定相同的屬性。

在 AOT 模式下,JPA 的 @PersistenceContext@PersistenceUnit 註解不能用於在測試類中執行依賴注入。

但是,自 Spring Framework 7.0 起,您可以使用 @Autowired 而不是 @PersistenceContext@PersistenceUnit 分別將 EntityManagerEntityManagerFactory 注入到測試中。

在 AOT 模式下不支援 @ContextHierarchy 註解。

要為在 GraalVM 本機映象中使用提供測試特定的執行時提示,您有以下選項。

TestRuntimeHintsRegistrar API 是核心 RuntimeHintsRegistrar API 的配套。如果您需要為不特定於特定測試類的測試支援註冊全域性提示,請優先實現 RuntimeHintsRegistrar 而不是測試特定的 API。

如果您實現自定義 ContextLoader,它必須實現 AotContextLoader 才能提供 AOT 構建時處理和 AOT 執行時執行支援。但是請注意,Spring Framework 和 Spring Boot 提供的所有上下文載入器實現都已經實現了 AotContextLoader

如果您實現自定義 TestExecutionListener,它必須實現 AotTestExecutionListener 才能參與 AOT 處理。請參閱 spring-test 模組中的 SqlScriptsTestExecutionListener 作為示例。

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