此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.4.0spring-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.enabledsystem 属性设置为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 Native Build Tools 能够在原生映像中运行测试。 当您想深入测试应用程序的内部结构是否在 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.xmlfile 使用spring-boot-starter-parent. 您应该有一个<parent>部分,如下所示:spring-doc.cadn.net.cn

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

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

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

要构建镜像并运行测试,请使用testgoal 替换为nativeTest配置文件处于活动状态:spring-doc.cadn.net.cn

$ mvn -PnativeTest test

使用 Gradle

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

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

$ gradle nativeTest