Reputation: 8315
I am getting error when I use mockito in instrumentation.
This is the library I am using:
def mockitoVersion = "3.10.0"
androidTestImplementation "org.mockito:mockito-android:$mockitoVersion"
I have added a file resources/mockito-extensions/org.mockito.plugins.MockMaker
which contains mock-maker-inline
and when I try to mock any object This is a sample class to mock:
open class TestFile {
val hit=12
}
Here we are mocking:
class InsTest {
@Mock
lateinit var testFile: TestFile
@Before
fun init(){
MockitoAnnotations.initMocks(this)
}
@Test
fun shouldCallMockedListener(){
assertTrue(testFile.hit==0)
}
}
Also tried this one, but same error returned:
val testFile = Mockito.mock(TestFile::class.java)
I got this error:
java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)
at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:84)
at java.lang.reflect.Proxy.invoke(Proxy.java:1006)
at $Proxy4.isTypeMockable(Unknown Source)
at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:33)
at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:22)
at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:250)
at org.mockito.internal.creation.MockSettingsImpl.build(MockSettingsImpl.java:232)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:83)
at org.mockito.Mockito.mock(Mockito.java:1954)
at org.mockito.Mockito.mock(Mockito.java:1865)
at com.example.mytestlab.InsTest.shouldCallMockedListener(InsTest.kt:24)
... 26 trimmed
Caused by: java.lang.IllegalStateException: Failed to load interface org.mockito.plugins.MockMaker implementation declared in sun.misc.CompoundEnumeration@13cf6d2
at org.mockito.internal.configuration.plugins.PluginInitializer.loadImpl(PluginInitializer.java:57)
at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:65)
at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:50)
at org.mockito.internal.configuration.plugins.PluginRegistry.<init>(PluginRegistry.java:26)
at org.mockito.internal.configuration.plugins.Plugins.<clinit>(Plugins.java:20)
at org.mockito.internal.configuration.plugins.Plugins.getMockMaker(Plugins.java:36)
at org.mockito.internal.util.MockUtil.<clinit>(MockUtil.java:28)
... 35 more
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at org.mockito.internal.configuration.plugins.PluginInitializer.loadImpl(PluginInitializer.java:52)
... 41 more
Caused by: org.mockito.exceptions.base.MockitoInitializationException:
Could not initialize inline Byte Buddy mock maker.
It appears as if you are trying to run this mock maker on Android which does not support the instrumentation API.
IMPORTANT INFORMATION FOR ANDROID USERS:
The regular Byte Buddy mock makers cannot generate code on an Android VM!
To resolve this, please use the 'mockito-android' dependency for your application:
https://search.maven.org/artifact/org.mockito/mockito-android
Java : 0.9
JVM vendor name : The Android Project
JVM vendor version : 2.1.0
JVM name : Dalvik
JVM version : 0.9
JVM info : null
OS name : Linux
OS version : 5.10.66-android12-9-00041-gfa9c9074531e-ab7914766
at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.<init>(InlineDelegateByteBuddyMockMaker.java:246)
at org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker.<init>(InlineByteBuddyMockMaker.java:25)
... 44 more
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Ljava/lang/management/ManagementFactory;
at net.bytebuddy.agent.ByteBuddyAgent$ProcessProvider$ForCurrentVm$ForLegacyVm.resolve(ByteBuddyAgent.java:1302)
at net.bytebuddy.agent.ByteBuddyAgent$ProcessProvider$ForCurrentVm.resolve(ByteBuddyAgent.java:1285)
at net.bytebuddy.agent.ByteBuddyAgent.install(ByteBuddyAgent.java:586)
at net.bytebuddy.agent.ByteBuddyAgent.install(ByteBuddyAgent.java:538)
at net.bytebuddy.agent.ByteBuddyAgent.install(ByteBuddyAgent.java:515)
at org.mockito.internal.creation.bytebuddy.InlineDelegateByteBuddyMockMaker.<clinit>(InlineDelegateByteBuddyMockMaker.java:117)
... 45 more
Caused by: java.lang.ClassNotFoundException: Didn't find class "java.lang.management.ManagementFactory" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/system/framework/android.test.mock.jar", zip file "/system/framework/android.test.base.jar", zip file "/data/app/~~SX1N6uxVq4_7KPEsETMR6A==/com.example.mytestlab.test-bjBXAf871pg19Xz-kKuSPQ==/base.apk", zip file "/data/app/~~faUk2vI3EdLKP3K8V1Py2Q==/com.example.mytestlab-2M3Ni-tFODEFqqY2eXcDMA==/base.apk"],nativeLibraryDirectories=[/data/app/~~SX1N6uxVq4_7KPEsETMR6A==/com.example.mytestlab.test-bjBXAf871pg19Xz-kKuSPQ==/lib/arm64, /data/app/~~faUk2vI3EdLKP3K8V1Py2Q==/com.example.mytestlab-2M3Ni-tFODEFqqY2eXcDMA==/lib/arm64, /system/lib64, /system_ext/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:218)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
... 51 more
Any suggestion to resolve this issue?
Upvotes: 6
Views: 865
Reputation: 389
Buried in the error message:
IMPORTANT INFORMATION FOR ANDROID USERS: The regular Byte Buddy mock makers cannot generate code on an Android VM! To resolve this, please use the 'mockito-android' dependency for your application
When you add "mock-maker-inline" to your configuration file, that will override the mockito-android MockMaker version and use an incompatible MockMaker plugin. I was able to fix this by removing the resources/mockito-extensions/org.mockito.plugins.MockMaker
file
Upvotes: 0