本章介绍了 Spring 的 Ahead of Time (AOT) 对集成测试的支持,使用 Spring TestContext 框架。

测试支持扩展了 Spring 的核心 AOT 支持,包括 以下功能。

  • 对当前项目中使用 TestContext 框架加载 .ApplicationContext

    • 为基于 JUnit Jupiter 和 JUnit 4 的测试类提供显式支持 作为对 TestNG 和其他使用 Spring 核心的测试框架的隐式支持 测试注解 — 只要测试是使用为当前项目注册的 JUnit 平台运行的。TestEngine

  • 构建时 AOT 处理:当前项目中的每个唯一测试 将刷新以进行 AOT 处理ApplicationContext

  • 运行时 AOT 支持:在 AOT 运行时模式下执行时,Spring 集成测试将 使用经过 AOT 优化的上下文缓存透明参与。ApplicationContext

默认情况下,所有测试都在 AOT 模式下启用。但是,您可以有选择地禁用 AOT 模式下的整个测试类或单个测试方法,通过用 @DisabledInAotMode 对其进行注释。 使用 JUnit Jupiter 时,您可以有选择地在 GraalVM 本机中启用或禁用测试 图片来自木星和注释。 请注意,在以下情况下,还会禁用带注释的测试类或测试方法 在 GraalVM 本机映像中运行,类似于 JUnit Jupiter 的注解。@EnabledInNativeImage@DisabledInNativeImage@DisabledInAotMode@DisabledInNativeImage

默认情况下,如果在构建时 AOT 处理过程中遇到错误,则会出现异常 将被抛出,整个过程将立即失败。

如果您希望在遇到错误后继续构建时 AOT 处理, 您可以禁用该模式,该模式会导致在级别上记录错误或在级别上记录更详细的信息。failOnErrorWARNDEBUG

可以通过命令行或构建脚本通过设置来禁用该模式 名为 的 JVM 系统属性。作为 或者,您可以通过 SpringProperties 机制设置相同的属性。failOnErrorspring.test.aot.processing.failOnErrorfalse

AOT 模式不支持注释。@ContextHierarchy

要提供特定于测试的运行时提示以在 GraalVM 本机映像中使用,您有 以下选项。

该 API 充当核心 API 的配套工具。如果需要注册全局提示以进行测试支持 不特定于特定测试类的,有利于实现特定于测试的 API。TestRuntimeHintsRegistrarRuntimeHintsRegistrarRuntimeHintsRegistrar

如果实现自定义,则必须在 提供 AOT 构建时处理和 AOT 运行时执行支持。注意 但是,Spring Framework 提供的所有上下文加载器实现和 Spring Boot 已经实现了 。ContextLoaderAotContextLoader

如果实现自定义,则必须实现 AotTestExecutionListener 才能参与 AOT 处理。请参阅 模块为例。TestExecutionListenerSqlScriptsTestExecutionListenerspring-test