mockk: "failed to access class androidx.lifecycle.LiveData$ObserverWrapper" error in 1.12.1 when stubbing LiveData in test with AndroidJUnit4 runner
After upgrading from 1.12.0 to 1.12.1 the following sample test fails:
package io.mockk.test.livedata
import androidx.lifecycle.LiveData
import androidx.test.ext.junit.runners.AndroidJUnit4
import io.mockk.every
import io.mockk.mockk
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class MockkLiveDataTest {
interface VM {
val liveData: LiveData<String>
}
@Test
fun `liveData is stubbed successfully`() {
val vm = mockk<VM>()
every { vm.liveData } returns mockk()
}
}
I managed to git bisect
the problem and the first bad commit was 62d5c79b68c2bcf6d9af0229f74ac2bb00a85710.
Error output
failed to access class androidx.lifecycle.LiveData$ObserverWrapper from class androidx.lifecycle.LiveData$Subclass1 (androidx.lifecycle.LiveData$ObserverWrapper is in unnamed module of loader org.robolectric.internal.AndroidSandbox$SdkSandboxClassLoader @55a304e4; androidx.lifecycle.LiveData$Subclass1 is in unnamed module of loader net.bytebuddy.dynamic.loading.MultipleParentClassLoader @7cc4c5c3)
java.lang.IllegalAccessError: failed to access class androidx.lifecycle.LiveData$ObserverWrapper from class androidx.lifecycle.LiveData$Subclass1 (androidx.lifecycle.LiveData$ObserverWrapper is in unnamed module of loader org.robolectric.internal.AndroidSandbox$SdkSandboxClassLoader @55a304e4; androidx.lifecycle.LiveData$Subclass1 is in unnamed module of loader net.bytebuddy.dynamic.loading.MultipleParentClassLoader @7cc4c5c3)
at androidx.lifecycle.LiveData$Subclass1.<clinit>(Unknown Source)
at jdk.internal.reflect.GeneratedSerializationConstructorAccessor9.newInstance(Unknown Source)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at org.objenesis.instantiator.sun.SunReflectionFactoryInstantiator.newInstance(SunReflectionFactoryInstantiator.java:48)
at io.mockk.proxy.jvm.ObjenesisInstantiator.instanceViaObjenesis(ObjenesisInstantiator.kt:75)
at io.mockk.proxy.jvm.ObjenesisInstantiator.instantiateViaProxy(ObjenesisInstantiator.kt:66)
at io.mockk.proxy.jvm.ObjenesisInstantiator.instance(ObjenesisInstantiator.kt:29)
at io.mockk.proxy.jvm.ProxyMaker.instantiate(ProxyMaker.kt:75)
at io.mockk.proxy.jvm.ProxyMaker.proxy(ProxyMaker.kt:42)
at io.mockk.impl.instantiation.JvmMockFactory.newProxy(JvmMockFactory.kt:34)
at io.mockk.impl.instantiation.AbstractMockFactory.newProxy$default(AbstractMockFactory.kt:29)
at io.mockk.impl.instantiation.AbstractMockFactory.temporaryMock(AbstractMockFactory.kt:127)
at io.mockk.impl.recording.states.RecordingState$call$retValue$1.invoke(RecordingState.kt:72)
at io.mockk.impl.instantiation.JvmAnyValueGenerator$anyValue$2.invoke(JvmAnyValueGenerator.kt:35)
at io.mockk.impl.instantiation.AnyValueGenerator.anyValue(AnyValueGenerator.kt:34)
at io.mockk.impl.instantiation.JvmAnyValueGenerator.anyValue(JvmAnyValueGenerator.kt:31)
at io.mockk.impl.recording.states.RecordingState.call(RecordingState.kt:70)
at io.mockk.impl.recording.CommonCallRecorder.call(CommonCallRecorder.kt:53)
at io.mockk.impl.stub.MockKStub.handleInvocation(MockKStub.kt:266)
at io.mockk.impl.instantiation.JvmMockFactoryHelper$mockHandler$1.invocation(JvmMockFactoryHelper.kt:23)
at io.mockk.proxy.jvm.advice.Interceptor.call(Interceptor.kt:21)
at io.mockk.proxy.jvm.advice.BaseAdvice.handle(BaseAdvice.kt:42)
at io.mockk.proxy.jvm.advice.jvm.JvmMockKProxyInterceptor.interceptNoSuper(JvmMockKProxyInterceptor.java:45)
...
at org.robolectric.RobolectricTestRunner$HelperTestRunner$1.evaluate(RobolectricTestRunner.java:591)
at org.robolectric.internal.SandboxTestRunner$2.lambda$evaluate$0(SandboxTestRunner.java:274)
at org.robolectric.internal.bytecode.Sandbox.lambda$runOnMainThread$0(Sandbox.java:88)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
About this issue
- Original URL
- State: closed
- Created 3 years ago
- Reactions: 17
- Comments: 17 (3 by maintainers)
@Raibaz is there a timeline for a release with this fix?
I’m planning on putting a release out sometime next week, sorry but this week’s a pretty busy one 😦
Sorry about this, v1.12.3 just came out 😃
This still happens in 1.12.2
I put up https://github.com/mockk/mockk/pull/782 which fixes it from the Robolectric side.
This issue resurface, and Robolectric has some findings, https://github.com/robolectric/robolectric/issues/5871