测试的提前支持
本章介绍Spring针对使用Spring TestContext框架的集成测试的提前(AOT)支持。
测试支持扩展了Spring的核心AOT支持,并具有以下功能。
-
构建时检测当前项目中所有使用TestContext框架加载
ApplicationContext
的集成测试。-
为基于JUnit Jupiter和JUnit 4的测试类提供显式支持,并为使用Spring核心测试注解的TestNG和其他测试框架提供隐式支持——只要测试是使用为当前项目注册的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处理,您可以禁用 可以通过设置名为 |
AOT模式不支持 |
要为在GraalVM原生镜像中使用提供特定于测试的运行时提示,您可以选择以下选项。
-
实现自定义
TestRuntimeHintsRegistrar
并通过META-INF/spring/aot.factories
全局注册它。 -
实现自定义
RuntimeHintsRegistrar
并通过META-INF/spring/aot.factories
全局注册它,或通过@ImportRuntimeHints
在测试类上本地注册它。 -
有关Spring核心运行时提示和注解支持的详细信息,请参阅运行时提示。
|
如果您实现自定义ContextLoader
,则必须实现AotContextLoader
才能提供AOT构建时处理和AOT运行时执行支持。但是,请注意,Spring框架和Spring Boot提供的所有上下文加载器实现都已实现AotContextLoader
。
如果您实现自定义TestExecutionListener
,则必须实现AotTestExecutionListener
才能参与AOT处理。请参阅spring-test
模块中的SqlScriptsTestExecutionListener
以了解示例。