对于最新的稳定版本,请使用 Spring Boot 3.4.0spring-doc.cn

测试 GraalVM 原生镜像

在编写本机映像应用程序时,我们建议您尽可能继续使用 JVM 来开发大多数单元和集成测试。 这将有助于缩短开发人员的构建时间,并允许您使用现有的 IDE 集成。 通过在 JVM 上实现广泛的测试覆盖,您可以将本机映像测试的重点放在可能不同的区域。spring-doc.cn

对于本机映像测试,您通常希望确保以下方面正常工作:spring-doc.cn

  • Spring AOT 引擎能够处理您的应用程序,并且它将在 AOT 处理模式下运行。spring-doc.cn

  • GraalVM 有足够的提示来确保可以生成有效的原生镜像。spring-doc.cn

使用 JVM 测试预先处理

当 Spring Boot 应用程序运行时,它会尝试检测它是否作为本机映像运行。 如果它作为本机映像运行,它将使用 Spring AOT 引擎在构建期间生成的代码初始化应用程序。spring-doc.cn

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

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

要在 JVM 上运行 Spring Boot 应用程序并使其使用 AOT 生成的代码,可以将 system 属性设置为。spring.aot.enabledtruespring-doc.cn

例如:spring-doc.cn

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

如果应用程序开始时将属性设置为 ,则您更确信它在转换为本机映像时将正常工作。spring.aot.enabledtruespring-doc.cn

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

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

GraalVM Native Build Tools 能够在原生映像中运行测试。 当您想深入测试应用程序的内部结构是否在 GraalVM 原生映像中工作时,这可能很有帮助。spring-doc.cn

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

Spring Framework 包括对运行测试的预先支持。 所有常用的 Spring 测试功能都适用于本机映像测试。 例如,您可以继续使用 @SpringBootTest 注释。 您还可以使用 Spring Boot 测试切片仅测试应用程序的特定部分。spring-doc.cn

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

使用 Maven

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

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

声明一个配置文件,用于配置运行本机测试所需的执行。 您可以使用命令行上的 标志激活配置文件。spring-boot-starter-parentnativeTest-Pspring-doc.cn

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

要构建映像并运行测试,请在配置文件处于活动状态的情况下使用目标:testnativeTestspring-doc.cn

$ mvn -PnativeTest test

使用 Gradle

Spring Boot Gradle 插件在应用 GraalVM Native Image 插件时自动配置 AOT 测试任务。 您应该检查您的 Gradle 构建是否包含包含 .pluginsorg.graalvm.buildtools.nativespring-doc.cn

要使用 Gradle 运行原生测试,您可以使用以下任务:nativeTestspring-doc.cn

$ gradle nativeTest