测试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

自从......原生图像编译阶段可能需要一段时间才能完成,有时在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来说,这意味着你应该用-非本地人以激活本地轮廓。 对于Gradle,你需要确保你的构建包含org.graalvm.buildtools.native插件。

如果你的申请以spring.aot.enabled属性设置为true那么你对转换成原生图像时能正常工作的信心会更高。spring-doc.cadn.net.cn

你也可以考虑对正在运行的应用程序进行集成测试。 比如,你可以用SpringWeb客户端调用你的应用程序 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靴启动父. 你应该有<家长>该部分看起来像这样:spring-doc.cadn.net.cn

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

Spring靴启动父定义了nativeTest配置文件为 Spring Boot 和 Native Build Tools 插件提供了必要的配置。 首先你需要在模块中添加这两个插件,才能选择加入该功能。 你的测试只有在nativeTest已启用。 你可以用-P命令行标记。spring-doc.cadn.net.cn

如果你不想用Spring靴启动父你需要配置执行过程测试 AOTSpring Boot 插件中的目标和测试目标来自Native Build Tools插件。

要构建镜像并运行测试,请使用测试目标nativeTest个人资料活跃:spring-doc.cadn.net.cn

$ mvn -PnativeTest test

使用 Gradle

当应用GraalVM原生映像插件时,Spring Boot Gradle插件会自动配置AOT测试任务。 你应该检查你的Gradle构建是否包含插件该块包括org.graalvm.buildtools.native.spring-doc.cadn.net.cn

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

$ gradle nativeTest