Feature that enables JUnit Platform testing support for GraalVM Native Image
There are two main modes of operation using this feature:
- Out of the box (for tests which do not use reflection internally).
- With the agent run (for tests with internal reflection).
Either way, artifact produced by building this repository should be included on classpath (either by using build tool plugins - as was done in samples subdirectory, or by adding manual configuration).
If support for your build system is missing at the moment, adding:
native-image
...
--no-fallback
--features=org.graalvm.junit.platform.JUnitPlatformFeature
org.graalvm.junit.platform.NativeImageJUnitLauncherto your native-image invocation should be sufficient.
If tests require reflection, then native-image-agent run is necessary.
For Gradle users this should be as easy as running tests using:
./gradlew -Pagent testConsoleLauncher
./gradlew -Pagent testNativeFor more information refer to project.hasProperty("agent") sections in native-image-testing.gradle.
In order for feature to register required tests, you either need to run JUnit Platform test on JVM with this feature on the classpath BEFORE native-image invocation, or run native-image with -DtestDiscovery argument added.
GraalVM with native-image should be present on the system, as well as $GRAALVM_HOME environment variable pointing to its location.
./gradlew publishToMavenLocalThis will publish the latest artifact to local maven repository.
You can also take a look at CI workflow here.
Following tasks are present in this project for testing this feature:
./gradlew testConsoleLauncher # runs standard JUnit test using JVM and ConsoleLauncher
./gradlew -Pagent testConsoleLauncher # includes agent and generates required reflection configuration
./gradlew testNative # builds native image using this feature for configuration
./gradlew -Pagent testNative # builds native image using additional configuration from agent run