本章介绍了 Spring 对使用 Spring TestContext 框架。
testing 支持扩展了 Spring 的核心 AOT 支持,其中包含 以下功能。
- 
当前项目中所有使用 TestContext 框架加载 .
ApplicationContext- 
为基于 JUnit Jupiter 和 JUnit 4 的测试类提供显式支持 作为对 TestNG 和其他使用 Spring 核心的测试框架的隐式支持 testing annotations — 只要测试是使用为当前项目注册的 JUnit Platform 运行的。
TestEngine 
 - 
 - 
构建时 AOT 处理:当前项目中每个唯一的测试 将刷新以进行 AOT 处理。
ApplicationContext - 
运行时 AOT 支持:在 AOT 运行时模式下执行时,Spring 集成测试将 使用透明地参与上下文缓存的 AOT-optimized。
ApplicationContext 
默认情况下,所有测试都在 AOT 模式下启用。但是,您可以选择性地禁用
AOT 模式下的整个测试类或单个测试方法,方法是使用 @DisabledInAotMode 进行注释。
使用 JUnit Jupiter 时,您可以选择性地启用或禁用 GraalVM 原生测试。
图片来自 Jupiter's 和 annotations。
请注意,在以下情况下,还会禁用带注释的测试类或测试方法
在 GraalVM 原生映像中运行,类似于 JUnit Jupiter 的注释。@EnabledInNativeImage@DisabledInNativeImage@DisabledInAotMode@DisabledInNativeImage
| 
 默认情况下,如果在构建时 AOT 处理期间遇到错误,则会出现异常 将被抛出,整个进程会立即失败。 如果您希望在遇到错误后继续进行构建时 AOT 处理,
您可以禁用该模式,这会导致在 level 上记录错误或在 level 上更详细地记录错误。 可以通过设置从命令行或构建脚本中禁用该模式
名为 的 JVM 系统属性。作为
或者,您可以通过   | 
| 
 默认情况下,如果在构建时 AOT 处理期间遇到错误,则会出现异常 将被抛出,整个进程会立即失败。 如果您希望在遇到错误后继续进行构建时 AOT 处理,
您可以禁用该模式,这会导致在 level 上记录错误或在 level 上更详细地记录错误。 可以通过设置从命令行或构建脚本中禁用该模式
名为 的 JVM 系统属性。作为
或者,您可以通过   | 
| 
 AOT 模式不支持该注释。  | 
| 
 AOT 模式不支持该注释。  | 
要提供特定于测试的运行时提示以在 GraalVM 原生映像中使用,您需要 以下选项。
- 
实现自定义
TestRuntimeHintsRegistrar并通过 .META-INF/spring/aot.factories - 
实现自定义
RuntimeHintsRegistrar并通过测试类或本地在本地注册它 通过@ImportRuntimeHints。META-INF/spring/aot.factories - 
使用
@Reflective或@RegisterReflectionForBinding注释测试类。 - 
有关 Spring 的核心运行时提示的详细信息,请参见运行时提示 和注释支持。
 
| 
 API 是核心 API 的配套工具。如果需要注册全局提示以测试支持
不特定于特定测试类,则更倾向于实现而不是特定于测试的 API。  | 
| 
 API 是核心 API 的配套工具。如果需要注册全局提示以测试支持
不特定于特定测试类,则更倾向于实现而不是特定于测试的 API。  | 
如果你实现了一个自定义的 ,它必须在
order 提供 AOT 构建时处理和 AOT 运行时执行支持。注意
但是,Spring Framework 和
Spring Boot 已经实现了 .ContextLoaderAotContextLoader
如果您实施自定义,则必须实现 AotTestExecutionListener 才能参与 AOT 处理。查看
module 为例。TestExecutionListenerSqlScriptsTestExecutionListenerspring-test