提前支持测试
本章涵盖 Spring 在使用 Spring TestContext 框架进行集成测试时对 Ahead of Time (AOT) 的支持。
测试支持扩展了 Spring 的 核心 AOT 支持,并包含以下功能。
-
在构建时检测当前项目中所有使用 TestContext 框架加载
ApplicationContext
的集成测试。-
为基于 JUnit Jupiter 和 JUnit 4 的测试类提供显式支持,并为 TestNG 和其他使用 Spring 核心测试注解的测试框架提供隐式支持,只要测试是使用为当前项目注册的 JUnit Platform
TestEngine
运行的。
-
-
构建时 AOT 处理:当前项目中每个唯一的测试
ApplicationContext
将被 刷新以进行 AOT 处理。 -
运行时 AOT 支持:在 AOT 运行时模式下执行时,Spring 集成测试将使用一个 AOT 优化的
ApplicationContext
,该上下文与 上下文缓存 透明地交互。
默认情况下,所有测试都在 AOT 模式下启用。但是,您可以通过使用 @DisabledInAotMode
注解来选择性地禁用 AOT 模式下的整个测试类或单个测试方法。使用 JUnit Jupiter 时,您可以通过 Jupiter 的 @EnabledInNativeImage
和 @DisabledInNativeImage
注解来选择性地在 GraalVM 原生镜像中启用或禁用测试。请注意,@DisabledInAotMode
也会在 GraalVM 原生镜像中运行时禁用已注解的测试类或测试方法,类似于 JUnit Jupiter 的 @DisabledInNativeImage
注解。
默认情况下,如果在构建时 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
。