此版本仍在开发中,尚未被视为稳定版本。如需最新稳定版本,请使用 Spring Boot 4.0.4!spring-doc.cadn.net.cn

测试 GraalVM 原生镜像

在编写原生镜像应用程序时,我们建议您尽可能继续使用JVM来开发大部分单元测试和集成测试。 这有助于缩短开发人员的构建时间,并允许您使用现有的IDE集成。 在JVM上拥有充分的测试覆盖后,您可以将原生镜像测试的重点放在那些可能表现不同的领域。spring-doc.cadn.net.cn

对于原生镜像测试,您通常希望确保以下方面能够正常工作:spring-doc.cadn.net.cn

使用 JVM 测试提前处理

当 Spring Boot 应用程序运行时,它会尝试检测是否以原生镜像方式运行。 如果是作为原生镜像运行,它将使用在构建时由 Spring AOT 引擎生成的代码来初始化应用程序。spring-doc.cadn.net.cn

如果应用程序运行在常规 JVM 上,则任何 AOT 生成的代码都会被忽略。spring-doc.cadn.net.cn

由于 native-image 编译阶段可能需要一段时间才能完成,因此在 JVM 上运行应用程序但让其使用 AOT 生成的初始化代码有时很有用。 这样做有助于您快速验证 AOT 生成的代码中没有任何错误,并且在应用程序最终转换为原生映像时不会缺少任何内容。spring-doc.cadn.net.cn

要在 JVM 上运行 Spring Boot 应用程序并使其使用 AOT 生成的代码,您可以将系统属性 spring.aot.enabled 设置为 truespring-doc.cadn.net.cn

$ java -Dspring.aot.enabled=true -jar myapplication.jar
你需要确保正在测试的 jar 包包含 AOT 生成的代码。 对于 Maven,这意味着你应该使用 -Pnative 进行构建以激活 native 配置文件。 对于 Gradle,你需要确保你的构建包含了 org.graalvm.buildtools.native 插件。

如果您的应用程序启动时将 spring.aot.enabled 属性设置为 true,那么您有更高的信心认为它在转换为原生镜像后能够正常工作。spring-doc.cadn.net.cn

您还可以考虑针对正在运行的应用程序执行集成测试。 例如,您可以使用 Spring WebClient 来调用您的应用程序 REST 端点。 或者,您也可以考虑使用 Selenium 等项目来检查您的应用程序的 HTML 响应。spring-doc.cadn.net.cn

使用原生构建工具进行测试

GraalVM Native Build Tools 包含在原生镜像中运行测试的功能。 当你需要深入测试应用程序的内部功能在 GraalVM 原生镜像中是否正常工作时,这会非常有帮助。spring-doc.cadn.net.cn

生成包含待运行测试的原生镜像可能是一个耗时的操作,因此大多数开发人员可能更倾向于在本地使用JVM。 但是,它们可以作为CI流水线的一部分非常有用。 例如,你可能会选择每天运行一次原生测试。spring-doc.cadn.net.cn

Spring Framework 包含对运行测试的预先(ahead-of-time)支持。 所有常规的 Spring 测试功能都适用于原生镜像测试。 例如,您可以继续使用 @SpringBootTest 注解。 您还可以使用 Spring Boot 测试切片 仅测试应用程序的特定部分。spring-doc.cadn.net.cn

Spring Framework 的原生测试支持按以下方式工作:spring-doc.cadn.net.cn

使用 Maven

要使用 Maven 运行原生测试,请确保您的 pom.xml 文件使用 spring-boot-starter-parent。 您应该有一个如下所示的 <parent> 部分:spring-doc.cadn.net.cn

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>3.5.13-SNAPSHOT</version>
</parent>

spring-boot-starter-parent 定义了一个 nativeTest 配置文件,该配置文件为 Spring Boot 和原生构建工具插件提供了必要的配置。 首先,您需要在模块中添加这两个插件以启用该功能。 只有当 nativeTest 启用时,您的测试才会在原生模式下执行。 您可以使用命令行上的 -P 标志来激活配置文件。spring-doc.cadn.net.cn

如果您不想使用 spring-boot-starter-parent,则需要为 Spring Boot 插件的 process-test-aot 目标和 Native Build Tools 插件的 test 目标配置执行。

要构建镜像并运行测试,请使用 test 目标并激活 nativeTest 配置文件:spring-doc.cadn.net.cn

$ mvn -PnativeTest test

使用 Gradle

当应用 GraalVM 原生镜像插件时,Spring Boot Gradle 插件会自动配置 AOT 测试任务。 您应检查 Gradle 构建中是否包含带有 org.graalvm.buildtools.nativeplugins 代码块。spring-doc.cadn.net.cn

要使用 Gradle 运行原生测试,您可以使用 nativeTest 任务:spring-doc.cadn.net.cn

$ gradle nativeTest