I cannot mock my MapStruct mapper in Quarkus 3 in combination with jmock ("is in unnamed module of loader")

21 Views Asked by At

When I try to mock my MapStruct mapper during a @QuarkusTest like this:

@RegisterExtension
JUnit5Mockery mockery = new JUnit5Mockery() {
    {
        setImposteriser(ByteBuddyClassImposteriser.INSTANCE);
        setThreadingPolicy(new Synchroniser());
    }
};

MyMapper mockMyMapper = mockery.mock(MyMapper.class);
QuarkusMock.installMockForType(mockMyMapper, MyMapper.class);

I get this error:

java.lang.ClassCastException:

class com.example.MyMapper$jMock$yRbf640e
   cannot be cast to class com.example.MyMapperImpl

(com.example.MyMapper$jMock$yRbf640e is in unnamed module of loader 
   org.jmock.internal.SearchingClassLoader @510bd87a;
   com.example.MyMapperImpl
   is in unnamed module of loader
   io.quarkus.bootstrap.classloading.QuarkusClassLoader @1dbd580)

What am I doing wrong?

1

There are 1 best solutions below

0
gkephorus On

The MapStruct system created a MyMapperImpl implementation for you. You will have to mock that in stead:

@RegisterExtension
JUnit5Mockery mockery = new JUnit5Mockery() {
    {
        setImposteriser(ByteBuddyClassImposteriser.INSTANCE);
        setThreadingPolicy(new Synchroniser());
    }
};

MyMapperImpl mockMyMapper = mockery.mock(MyMapperImpl.class);
QuarkusMock.installMockForType(mockMyMapper, MyMapperImpl.class);

Then all works nicely.