Using MockKExtension in a unit test fails when running ./gradlew clean nativeTest.

The error is:

Failures (2):
  JUnit Jupiter:DemoApplicationTests:contextLoads()
    MethodSource [className = 'com.example.demo.DemoApplicationTests', methodName = 'contextLoads', methodParameterTypes = '']
    => java.lang.ExceptionInInitializerError
       io.mockk.junit5.MockKExtension.postProcessTestInstance(MockKExtension.kt:177)
       org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377)
       org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382)
       org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377)
       java.base@17.0.5/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
       [...]
     Caused by: java.lang.IllegalStateException: Cannot locate class file for Byte Buddy installer
       net.bytebuddy.agent.ByteBuddyAgent$AgentProvider$ForByteBuddyAgent.createJarFile(ByteBuddyAgent.java:1501)
       net.bytebuddy.agent.ByteBuddyAgent$AgentProvider$ForByteBuddyAgent.resolve(ByteBuddyAgent.java:1540)
       net.bytebuddy.agent.ByteBuddyAgent.install(ByteBuddyAgent.java:631)
       net.bytebuddy.agent.ByteBuddyAgent.install(ByteBuddyAgent.java:611)
       net.bytebuddy.agent.ByteBuddyAgent.install(ByteBuddyAgent.java:563)
       [...]
  JUnit Jupiter:DemoApplicationTests
    ClassSource [className = 'com.example.demo.DemoApplicationTests', filePosition = null]
    => java.lang.NoClassDefFoundError: Could not initialize class io.mockk.impl.JvmMockKGateway
       io.mockk.junit5.MockKExtension.afterAll(MockKExtension.kt:189)
       org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeAfterAllCallbacks$18(ClassBasedTestDescriptor.java:461)
       org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
       org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeAfterAllCallbacks$19(ClassBasedTestDescriptor.java:461)
       java.base@17.0.5/java.util.ArrayList.forEach(ArrayList.java:1511)
       org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeAfterAllCallbacks(ClassBasedTestDescriptor.java:461)
       org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.after(ClassBasedTestDescriptor.java:235)
       org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.after(ClassBasedTestDescriptor.java:84)
       org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:161)
       org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
       [...]

I created a minimal example with minimal changes from start.spring.io: https://github.com/ArjanSchouten/spring-boot-mockk-native

I tried to add hints for io.mockk.impl.JvmMockKGateway but didn't manage to get it to work.

(./gradlew clean test just works)

Comment From: wilkinsona

Thanks for the report but this will have to be addressed in MockK or, perhaps, Mockito. You may also be interested in https://github.com/spring-projects/spring-boot/issues/32195 which is tracking support for Spring Boot's Mockito integration (@MockBean and @SpyBean) in a native image.