此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.4! |
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.4! |
在编写本机映像应用程序时,我们建议您尽可能继续使用 JVM 来开发大多数单元和集成测试。 这将有助于缩短开发人员的构建时间,并允许您使用现有的 IDE 集成。 通过在 JVM 上实现广泛的测试覆盖,您可以将本机映像测试的重点放在可能不同的区域。
对于本机映像测试,您通常希望确保以下方面正常工作:
-
Spring AOT 引擎能够处理您的应用程序,并且它将在 AOT 处理模式下运行。
-
GraalVM 有足够的提示来确保可以生成有效的原生镜像。
使用 JVM 测试预先处理
当 Spring Boot 应用程序运行时,它会尝试检测它是否作为本机映像运行。 如果它作为本机映像运行,它将使用 Spring AOT 引擎在构建期间生成的代码初始化应用程序。
如果应用程序在常规 JVM 上运行,则忽略任何 AOT 生成的代码。
由于编译阶段可能需要一段时间才能完成,因此有时在 JVM 上运行应用程序,但让它使用 AOT 生成的初始化代码是有用的。
这样做有助于您快速验证 AOT 生成的代码中没有错误,并且在应用程序最终转换为本机映像时没有遗漏任何内容。native-image
要在 JVM 上运行 Spring Boot 应用程序并使其使用 AOT 生成的代码,可以将 system 属性设置为。spring.aot.enabled
true
例如:
$ java -Dspring.aot.enabled=true -jar myapplication.jar
您需要确保正在测试的 jar 包含 AOT 生成的代码。
对于 Maven,这意味着您应该使用 构建 来激活配置文件。
对于 Gradle,您需要确保您的构建包含插件。-Pnative native org.graalvm.buildtools.native |
如果应用程序开始时将属性设置为 ,则您更确信它在转换为本机映像时将正常工作。spring.aot.enabled
true
您还可以考虑针对正在运行的应用程序运行集成测试。
例如,您可以使用 Spring 调用应用程序 REST 端点。
或者,您可以考虑使用像 Selenium 这样的项目来检查应用程序的 HTML 响应。WebClient
您需要确保正在测试的 jar 包含 AOT 生成的代码。
对于 Maven,这意味着您应该使用 构建 来激活配置文件。
对于 Gradle,您需要确保您的构建包含插件。-Pnative native org.graalvm.buildtools.native |
使用原生构建工具进行测试
GraalVM Native Build Tools 能够在原生映像中运行测试。 当您想深入测试应用程序的内部结构是否在 GraalVM 原生映像中工作时,这可能很有帮助。
生成包含要运行的测试的本机映像可能是一项耗时的操作,因此大多数开发人员可能更愿意在本地使用 JVM。 但是,它们作为 CI 管道的一部分非常有用。 例如,您可以选择每天运行一次本机测试。
Spring Framework 包括对运行测试的预先支持。
所有常用的 Spring 测试功能都适用于本机映像测试。
例如,您可以继续使用 Annotation。
您还可以使用 Spring Boot 测试切片仅测试应用程序的特定部分。@SpringBootTest
Spring Framework 的原生测试支持以以下方式工作:
-
分析测试以发现所需的任何实例。
ApplicationContext
-
将提前处理应用于每个应用程序上下文,并生成资产。
-
将创建一个原生镜像,生成的资产由 GraalVM 处理。
-
本机映像还包括配置了已发现测试列表的 JUnit。
TestEngine
-
本机映像启动,触发将运行每个测试并报告结果的引擎。
使用 Maven
要使用 Maven 运行本机测试,请确保您的文件使用 .
您应该有一个如下所示的部分:pom.xml
spring-boot-starter-parent
<parent>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.0-SNAPSHOT</version>
</parent>
声明一个配置文件,用于配置运行本机测试所需的执行。
您可以使用命令行上的 标志激活配置文件。spring-boot-starter-parent
nativeTest
-P
如果您不想使用,则需要为 Spring Boot 插件中的目标和 Native Build Tools 插件中的目标配置执行。spring-boot-starter-parent process-test-aot test |
要构建映像并运行测试,请在配置文件处于活动状态的情况下使用目标:test
nativeTest
$ mvn -PnativeTest test
如果您不想使用,则需要为 Spring Boot 插件中的目标和 Native Build Tools 插件中的目标配置执行。spring-boot-starter-parent process-test-aot test |