Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 540528

Summary: [Java 11] 60 org.eclipse.e4.ui.tests fail with "Mockito cannot mock this class" error
Product: [Eclipse Project] Platform Reporter: Andrey Loskutov <loskutov>
Component: UIAssignee: Platform-UI-Inbox <Platform-UI-Inbox>
Status: CLOSED DUPLICATE QA Contact:
Severity: major    
Priority: P3    
Version: 4.10   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:

Description Andrey Loskutov CLA 2018-10-27 04:01:53 EDT
On Java 11 SDK builds page we see following errors, all coming due the breaking JDK changes and "old" Mockito we are using.

This is most likely decribed in https://github.com/mockito/mockito/issues/1419 and https://github.com/mockito/mockito/issues/1483

Looks like 1419 issue was fixed in 2.19.1 version of Mockito (https://github.com/mockito/mockito/blob/release/2.x/doc/release-notes/official.md), we are still on 2.13 (at least the manifest says that), and Orbit also has 2.13.

Also 2.22.1 version claim to have better Java 11 support. 

Example stack:

Mockito cannot mock this class: class org.eclipse.e4.core.services.log.Logger. Mockito can only mock non-private & non-final classes. If you're not sure why you're getting this error, please report to the mailing list. Java : 11 JVM vendor name : Oracle Corporation JVM vendor version : 11+28 JVM name : OpenJDK 64-Bit Server VM JVM version : 11+28 JVM info : mixed mode OS name : Linux OS version : 3.10.0-327.10.1.el7.x86_64 Underlying exception : java.lang.UnsupportedOperationException: Cannot define class using reflection 

org.mockito.exceptions.base.MockitoException: 
Mockito cannot mock this class: class org.eclipse.e4.core.services.log.Logger. 

Mockito can only mock non-private & non-final classes. 
If you're not sure why you're getting this error, please report to the mailing list. 


Java : 11 
JVM vendor name : Oracle Corporation 
JVM vendor version : 11+28 
JVM name : OpenJDK 64-Bit Server VM 
JVM version : 11+28 
JVM info : mixed mode 
OS name : Linux 
OS version : 3.10.0-327.10.1.el7.x86_64 


Underlying exception : java.lang.UnsupportedOperationException: Cannot define class using reflection 
at org.eclipse.e4.ui.tests.workbench.ModelAssemblerFragmentOrderingTests.setup(ModelAssemblerFragmentOrderingTests.java:84) 
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.base/java.lang.reflect.Method.invoke(Method.java:566) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runners.Suite.runChild(Suite.java:128) 
at org.junit.runners.Suite.runChild(Suite.java:27) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:115) 
at org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:39) 
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) 
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) 
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) 
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) 
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) 
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) 
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) 
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) 
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497) 
at org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:79) 
at org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:70) 
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:220) 
at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:188) 
at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:202) 
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:181) 
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128) 
at org.eclipse.test.EclipseTestRunner.runTests(EclipseTestRunner.java:291) 
at org.eclipse.test.EclipseTestRunner.run(EclipseTestRunner.java:267) 
at org.eclipse.test.CoreTestApplication.runTests(CoreTestApplication.java:41) 
at org.eclipse.test.CoreTestApplication.run(CoreTestApplication.java:37) 
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.base/java.lang.reflect.Method.invoke(Method.java:566) 
at org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:592) 
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:205) 
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137) 
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107) 
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:391) 
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:246) 
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.base/java.lang.reflect.Method.invoke(Method.java:566) 
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659) 
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:595) 
at org.eclipse.equinox.launcher.Main.run(Main.java:1501) 
at org.eclipse.equinox.launcher.Main.main(Main.java:1474) 
at org.eclipse.core.launcher.Main.main(Main.java:37) 
Caused by: java.lang.UnsupportedOperationException: Cannot define class using reflection 
at net.bytebuddy.dynamic.loading.ClassInjector$UsingReflection$Dispatcher$Unavailable.defineClass(ClassInjector.java:821) 
at net.bytebuddy.dynamic.loading.ClassInjector$UsingReflection.inject(ClassInjector.java:185) 
at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$Default$InjectionDispatcher.load(ClassLoadingStrategy.java:187) 
at net.bytebuddy.dynamic.TypeResolutionStrategy$Passive.initialize(TypeResolutionStrategy.java:79) 
at net.bytebuddy.dynamic.DynamicType$Default$Unloaded.load(DynamicType.java:4456) 
at org.mockito.internal.creation.bytebuddy.SubclassBytecodeGenerator.mockClass(SubclassBytecodeGenerator.java:121) 
at org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator$1.call(TypeCachingBytecodeGenerator.java:37) 
at org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator$1.call(TypeCachingBytecodeGenerator.java:34) 
at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:138) 
at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:346) 
at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:161) 
at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:355) 
at org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator.mockClass(TypeCachingBytecodeGenerator.java:32) 
at org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker.createMockType(SubclassByteBuddyMockMaker.java:71) 
at org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker.createMock(SubclassByteBuddyMockMaker.java:42) 
at org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker.createMock(ByteBuddyMockMaker.java:25) 
at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:35) 
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:65) 
at org.mockito.Mockito.mock(Mockito.java:1821) 
at org.mockito.Mockito.mock(Mockito.java:1734) 
... 69 more 
Caused by: java.lang.IllegalStateException: Could not find sun.misc.Unsafe 
at net.bytebuddy.dynamic.loading.ClassInjector$UsingUnsafe$Dispatcher$Disabled.initialize(ClassInjector.java:1357) 
at net.bytebuddy.dynamic.loading.ClassInjector$UsingUnsafe.inject(ClassInjector.java:1193) 
at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$ForUnsafeInjection.load(ClassLoadingStrategy.java:458) 
at net.bytebuddy.dynamic.TypeResolutionStrategy$Passive.initialize(TypeResolutionStrategy.java:79) 
at net.bytebuddy.dynamic.DynamicType$Default$Unloaded.load(DynamicType.java:4456) 
at net.bytebuddy.dynamic.loading.ClassInjector$UsingReflection$Dispatcher$Indirect.make(ClassInjector.java:684) 
at net.bytebuddy.dynamic.loading.ClassInjector$UsingReflection$Dispatcher$CreationAction.run(ClassInjector.java:302) 
at net.bytebuddy.dynamic.loading.ClassInjector$UsingReflection$Dispatcher$CreationAction.run(ClassInjector.java:290) 
at java.base/java.security.AccessController.doPrivileged(Native Method) 
at net.bytebuddy.dynamic.loading.ClassInjector$UsingReflection.<clinit>(ClassInjector.java:70) 
at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$Default$InjectionDispatcher.load(ClassLoadingStrategy.java:184) 
at net.bytebuddy.dynamic.TypeResolutionStrategy$Passive.initialize(TypeResolutionStrategy.java:79) 
at net.bytebuddy.dynamic.DynamicType$Default$Unloaded.load(DynamicType.java:4456) 
at org.mockito.internal.creation.bytebuddy.SubclassBytecodeGenerator.mockClass(SubclassBytecodeGenerator.java:121) 
at org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator$1.call(TypeCachingBytecodeGenerator.java:37) 
at org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator$1.call(TypeCachingBytecodeGenerator.java:34) 
at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:138) 
at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:346) 
at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:161) 
at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:355) 
at org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator.mockClass(TypeCachingBytecodeGenerator.java:32) 
at org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker.createMockType(SubclassByteBuddyMockMaker.java:71) 
at org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker.createMock(SubclassByteBuddyMockMaker.java:42) 
at org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker.createMock(ByteBuddyMockMaker.java:25) 
at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:35) 
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:65) 
at org.mockito.Mockito.mock(Mockito.java:1821) 
at org.mockito.Mockito.mock(Mockito.java:1734) 
at org.eclipse.e4.ui.workbench.renderers.swt.ThemeDefinitionChangedHandlerTest.testHandleEventWhenThemeChanged(ThemeDefinitionChangedHandlerTest.java:66) 
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.base/java.lang.reflect.Method.invoke(Method.java:566) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
... 60 more 
Caused by: java.lang.NoSuchMethodException: sun.misc.Unsafe.defineClass(java.lang.String, [B, int, int, java.lang.ClassLoader, java.security.ProtectionDomain) 
at java.base/java.lang.Class.getMethod(Class.java:2109) 
at net.bytebuddy.dynamic.loading.ClassInjector$UsingUnsafe$Dispatcher$CreationAction.run(ClassInjector.java:1260) 
at net.bytebuddy.dynamic.loading.ClassInjector$UsingUnsafe$Dispatcher$CreationAction.run(ClassInjector.java:1248) 
at java.base/java.security.AccessController.doPrivileged(Native Method) 
at net.bytebuddy.dynamic.loading.ClassInjector$UsingUnsafe.<clinit>(ClassInjector.java:1127) 
... 95 more
Comment 1 Andrey Loskutov CLA 2018-10-27 04:05:05 EDT

*** This bug has been marked as a duplicate of bug 539947 ***