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

对于原生图像测试,您通常希望确保以下方面有效:Spring中文文档

  • Spring AOT 引擎能够处理您的应用程序,并且它将在 AOT 处理模式下运行。Spring中文文档

  • GraalVM 有足够的提示来确保可以生成有效的本机映像。Spring中文文档

使用 JVM 测试提前处理

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

如果应用程序在常规 JVM 上运行,则将忽略任何 AOT 生成的代码。Spring中文文档

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

要在 JVM 上运行 Spring Boot 应用程序并让它使用 AOT 生成的代码,您可以将 system 属性设置为 。spring.aot.enabledtrueSpring中文文档

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

如果应用程序以设置为 的属性启动,则您更有信心在转换为本机映像时将起作用。spring.aot.enabledtrueSpring中文文档

还可以考虑对正在运行的应用程序运行集成测试。 例如,您可以使用 Spring 调用应用程序 REST 端点。 或者,您可以考虑使用像 Selenium 这样的项目来检查应用程序的 HTML 响应。WebClientSpring中文文档

您需要确保正在测试的 jar 包含 AOT 生成的代码。 对于 Maven,这意味着您应该构建以激活配置文件。 对于 Gradle,您需要确保您的构建包含插件。-Pnativenativeorg.graalvm.buildtools.native

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

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

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

Spring Framework 包括对运行测试的提前支持。 所有常用的 Spring 测试功能都适用于本机图像测试。 例如,您可以继续使用批注。 您还可以使用 Spring Boot 测试切片来仅测试应用程序的特定部分。@SpringBootTestSpring中文文档

Spring Framework 的本机测试支持按以下方式工作:Spring中文文档

  • 分析测试以发现所需的任何实例。ApplicationContextSpring中文文档

  • 预先处理将应用于这些应用程序上下文中的每一个,并生成资产。Spring中文文档

  • 将创建一个本机映像,生成的资产将由 GraalVM 处理。Spring中文文档

  • 本机映像还包括配置了已发现测试列表的 JUnit。TestEngineSpring中文文档

  • 本机映像启动,触发引擎,该引擎将运行每个测试并报告结果。Spring中文文档

使用 Maven

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

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

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

如果您不想使用,则需要为 Spring Boot 插件中的目标和本机构建工具插件中的目标配置执行。spring-boot-starter-parentprocess-test-aottest

若要生成映像并运行测试,请使用配置文件处于活动状态的目标:testnativeTestSpring中文文档

$ mvn -PnativeTest test

使用 Gradle

Spring Boot Gradle 插件在应用 GraalVM Native Image 插件时自动配置 AOT 测试任务。 您应该检查您的 Gradle 版本是否包含包含 的块。pluginsorg.graalvm.buildtools.nativeSpring中文文档

要使用 Gradle 运行本机测试,您可以使用以下任务:nativeTestSpring中文文档

$ gradle nativeTest
如果您不想使用,则需要为 Spring Boot 插件中的目标和本机构建工具插件中的目标配置执行。spring-boot-starter-parentprocess-test-aottest