测试的预先编译支持
本章涵盖Spring TestContext框架对使用提前编译(AOT)的集成测试的支持。
测试支持扩展了Spring的核心AOT支持,并包含以下功能。
-
构建时检测当前项目中所有使用TestContext框架加载
ApplicationContext的集成测试。-
为基于JUnit Jupiter和JUnit 4的测试类提供明确支持,同时隐式支持TestNG及其他使用Spring核心测试注解的测试框架——前提是测试需通过当前项目已注册的JUnit Platform
TestEngine运行。
-
-
构建时AOT处理:每个唯一的测试
ApplicationContext在当前项目中将会刷新以进行AOT处理。 -
运行时AOT支持:在AOT运行时模式下执行时,Spring集成测试将使用经过AOT优化的
ApplicationContext,该优化器可与上下文缓存无缝协作。
所有测试在AOT模式下默认都是启用的。但是,你可以通过使用
@DisabledInAotMode注解来选择性地禁用整个测试类或单个测试方法。
当使用JUnit Jupiter时,可以通过Jupiter的@EnabledInNativeImage和@DisabledInNativeImage注解在GraalVM原生镜像中选择性地启用或禁用测试。
请注意,@DisabledInAotMode在GraalVM原生镜像中运行时也会禁用被注解的测试类或测试方法,类似于JUnit Jupiter的
@DisabledInNativeImage注解。
|
默认情况下,如果在构建时AOT处理过程中遇到错误,将抛出异常,并且整个过程会立即失败。 如果你希望在遇到错误后仍继续进行构建时的AOT处理,可以禁用 可以通过命令行或构建脚本将名为 |
|
JPA的 然而,从Spring框架7.0开始,您可以在测试中使用 |
|
|
要为GraalVM本机镜像中的使用提供测试专用的运行时提示,可使用以下选项。
-
实现一个自定义的
TestRuntimeHintsRegistrar并通过META-INF/spring/aot.factories进行全局注册。 -
实现自定义
RuntimeHintsRegistrar并通过META-INF/spring/aot.factories全局注册,或通过@ImportRuntimeHints在测试类上局部注册。 -
有关Spring核心运行时提示和注解支持的详细信息,请参阅运行时提示。
|
|
如果您实现自定义的 ContextLoader,则必须实现
AotContextLoader 接口,
才能提供 AOT 构建时处理和 AOT 运行时执行支持。但请注意,
Spring Framework 和 Spring Boot 提供的所有上下文加载器实现均已实现 AotContextLoader。
如果您实现了一个自定义的 TestExecutionListener,它必须实现
AotTestExecutionListener
才能参与AOT处理。有关示例,请参见
spring-test 模块中的 SqlScriptsTestExecutionListener。