測試 GraalVM 原生映象

在編寫本機映象應用程式時,我們建議您儘可能繼續使用 JVM 來開發大部分單元測試和整合測試。這將有助於縮短開發人員構建時間,並允許您使用現有的 IDE 整合。在 JVM 上進行廣泛的測試覆蓋後,您可以將本機映象測試重點放在可能有所不同的領域。

對於本機映象測試,您通常需要確保以下方面能夠正常工作:

  • Spring AOT 引擎能夠處理您的應用程式,並且它將以 AOT 處理模式執行。

  • GraalVM 具有足夠的提示,以確保可以生成有效的本機映象。

使用 JVM 測試提前處理

當 Spring Boot 應用程式執行時,它會嘗試檢測自己是否正在作為本機映象執行。如果它作為本機映象執行,它將使用 Spring AOT 引擎在構建時生成的程式碼來初始化應用程式。

如果應用程式在常規 JVM 上執行,則任何 AOT 生成的程式碼都將被忽略。

由於 native-image 編譯階段可能需要一段時間才能完成,因此有時在 JVM 上執行應用程式但使用 AOT 生成的初始化程式碼會很有用。這樣做有助於您快速驗證 AOT 生成的程式碼中沒有錯誤,並且當您的應用程式最終轉換為本機映象時,沒有任何遺漏。

要在 JVM 上執行 Spring Boot 應用程式並使其使用 AOT 生成的程式碼,您可以將 spring.aot.enabled 系統屬性設定為 true

例如:

$ java -Dspring.aot.enabled=true -jar myapplication.jar
您需要確保您正在測試的 jar 包含 AOT 生成的程式碼。對於 Maven,這意味著您應該使用 -Pnative 進行構建以啟用 native 配置檔案。對於 Gradle,您需要確保您的構建包含 org.graalvm.buildtools.native 外掛。

如果您的應用程式在 spring.aot.enabled 屬性設定為 true 的情況下啟動,那麼您更有信心它在轉換為本機映象時會工作。

您還可以考慮針對正在執行的應用程式執行整合測試。例如,您可以使用 Spring WebClient 呼叫您的應用程式 REST 端點。或者您可能考慮使用 Selenium 等專案來檢查您應用程式的 HTML 響應。

使用本機構建工具進行測試

GraalVM Native Build Tools 包含在本機映象中執行測試的功能。當您想要深入測試應用程式內部在 GraalVM 本機映象中工作時,這會很有幫助。

生成包含要執行的測試的本機映象可能是一個耗時的操作,因此大多數開發人員可能更喜歡在本地使用 JVM。然而,它們在 CI 管道中會非常有用。例如,您可以選擇每天執行一次本機測試。

Spring Framework 包含對執行測試的提前支援。所有常見的 Spring 測試功能都適用於本機映象測試。例如,您可以繼續使用 @SpringBootTest 註解。您還可以使用 Spring Boot 測試切片來僅測試應用程式的特定部分。

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>4.0.0</version>
</parent>

spring-boot-starter-parent 定義了一個 nativeTest 配置檔案,它為 Spring Boot 和 Native Build Tools 外掛提供了必要的配置。首先,您需要將這兩個外掛新增到模組中以選擇此功能。您的測試僅在啟用 nativeTest 時才以本機模式執行。您可以使用命令列上的 -P 標誌啟用配置檔案。

如果您不想使用 spring-boot-starter-parent,則需要為 Spring Boot 外掛的 process-test-aot 目標和 Native Build Tools 外掛的 test 目標配置執行。

要構建映象並執行測試,請使用 test 目標並激活 nativeTest 配置檔案:

$ mvn -PnativeTest test

使用 Gradle

當應用 GraalVM Native Image 外掛時,Spring Boot Gradle 外掛會自動配置 AOT 測試任務。您應該檢查您的 Gradle 構建是否包含一個 plugins 塊,其中包含 org.graalvm.buildtools.native

要使用 Gradle 執行本機測試,您可以使用 nativeTest 任務:

$ gradle nativeTest
© . This site is unofficial and not affiliated with VMware.