对于最新的稳定版本,请使用 Spring Boot 3.5.5spring-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系统属性设置为true.spring-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

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

使用本机构建工具进行测试

GraalVM 本机构建工具包括在本机映像中运行测试的功能。 当您想要深入测试应用程序的内部结构是否在 GraalVM 本机映像中工作时,这会很有帮助。spring-doc.cadn.net.cn

生成包含要运行的测试的本机映像可能是一项耗时的作,因此大多数开发人员可能更喜欢在本地使用 JVM。 但是,它们作为 CI 管道的一部分非常有用。 例如,您可以选择每天运行一次本机测试。spring-doc.cadn.net.cn

Spring Framework 包括对运行测试的预先支持。 所有常见的 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.4.9</version>
</parent>

spring-boot-starter-parent声明一个nativeTest配置文件,用于配置运行本机测试所需的执行。 您可以使用-P标志。spring-doc.cadn.net.cn

如果您不想使用spring-boot-starter-parent您需要为process-test-aot目标和test目标。

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

$ mvn -PnativeTest test

使用 Gradle

应用 GraalVM Native Image 插件时,Spring Boot Gradle 插件会自动配置 AOT 测试任务。 您应该检查您的 Gradle build 是否包含plugins块,包括org.graalvm.buildtools.native.spring-doc.cadn.net.cn

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

$ gradle nativeTest