java.lang.InternalError: class redefinition failed: invalid class
beatjost opened this issue · 0 comments
Versions/Environement
- JMockit version: 1.49
- Gradle version: 5.6.4
- Java version: 11
- JUnit 5.5.2
Some junit tests are failing with a strange exeption:
java.lang.InternalError: class redefinition failed: invalid class at java.instrument/sun.instrument.InstrumentationImpl.retransformClasses0(Native Method) at java.instrument/sun.instrument.InstrumentationImpl.retransformClasses(InstrumentationImpl.java:167) at mockit.internal.startup.Startup.retransformClass(Startup.java:58) at mockit.internal.state.CachedClassfiles.getClassfile(CachedClassfiles.java:123) at mockit.internal.ClassFile.createReaderOrGetFromCache(ClassFile.java:92) at mockit.internal.expectations.mocking.BaseTypeRedefinition.redefineClassAndItsSuperClasses(BaseTypeRedefinition.java:178) at mockit.internal.expectations.mocking.BaseTypeRedefinition.redefineMethodsAndConstructorsInTargetType(BaseTypeRedefinition.java:173) at mockit.internal.expectations.mocking.BaseTypeRedefinition.redefineTargetClassAndCreateInstanceFactory(BaseTypeRedefinition.java:245) at mockit.internal.expectations.mocking.BaseTypeRedefinition.redefineType(BaseTypeRedefinition.java:65) at mockit.internal.expectations.mocking.TypeRedefinition.redefineType(TypeRedefinition.java:28) at mockit.internal.expectations.mocking.FieldTypeRedefinitions.redefineFieldType(FieldTypeRedefinitions.java:78) at mockit.internal.expectations.mocking.FieldTypeRedefinitions.redefineFieldType(FieldTypeRedefinitions.java:65) at mockit.internal.expectations.mocking.FieldTypeRedefinitions.redefineFieldTypes(FieldTypeRedefinitions.java:53) at mockit.internal.expectations.mocking.FieldTypeRedefinitions.<init>(FieldTypeRedefinitions.java:33) at mockit.integration.TestRunnerDecorator.handleMockFieldsForWholeTestClass(TestRunnerDecorator.java:142) at mockit.integration.junit5.JMockitExtension.postProcessTestInstance(JMockitExtension.java:52)
Guess this is somehow related to the "MinioClient", as all of the failing classes have this dependency.
Here is a sample test:
public class RemoverTest {
@Tested
Remover remover;
@Mocked
MinioClient minioClient;
@Injectable
String EXPIRES = "2323";
@Injectable
DocumentRepository documentRepo;
@Injectable
AuthorizationHelper authHelper;
@Injectable
DocumentService documentService;
@Test
public void testDelete() throws Exception {
new Expectations() {{
remover.delete("bucket", "filename");
result = new InvalidEndpointException(anyString, anyString);
}};
ResponseEntity<Void> response = remover.delete("bucket", "filename");
assertEquals(response.getStatusCode(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
It fails somehow in the Mockit::Startkup class (instrumentation)
@SuppressWarnings("ConstantConditions")
public static void retransformClass(@Nonnull Class<?> aClass) {
try { instrumentation.retransformClasses(aClass); } catch (UnmodifiableClassException ignore) {}
}
Any idea or hints how to solve this, all the other tests run fine...