AndroidのInstrumentTestがmockkのバージョンによっては動かない。
build.gradle.kts
・・・
dependencies {
・・・
androidTestImplementation("io.mockk:mockk-android:x.xx.x")
androidTestImplementation("io.mockk:mockk-agent:x.xx.x")
mockk-android
mockk-agent
のバージョンですが、今のところ
- 1.13.3 → OK
- 1.13.4 → NG
- 1.13.5 → NG
- 1.13.6 → NG
- 1.13.7 → NG
となります。
java.lang.IncompatibleClassChangeError: Superclass kotlinx.coroutines.flow.StateFlow of kotlinx.coroutines.flow.StateFlow_1_Proxy is an interface (declaration of 'kotlinx.coroutines.flow.StateFlow_1_Proxy' appears in /data/user/0/jp.co.xxxxxx.xxxxxxxx/app_dxmaker_cache/Generated_-767958641.jar)
at java.lang.VMClassLoader.findLoadedClass(Native Method)
at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738)
at java.lang.ClassLoader.loadClass(ClassLoader.java:363)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.android.dx.stock.ProxyBuilder.loadClass(ProxyBuilder.java:358)
at com.android.dx.stock.ProxyBuilder.buildProxyClass(ProxyBuilder.java:340)
at io.mockk.proxy.android.transformation.AndroidSubclassInstrumentation.subclass(AndroidSubclassInstrumentation.kt:37)
at io.mockk.proxy.common.ProxyMaker.subclass(ProxyMaker.kt:144)
at io.mockk.proxy.common.ProxyMaker.proxy(ProxyMaker.kt:53)
at io.mockk.impl.instantiation.JvmMockFactory.newProxy(JvmMockFactory.kt:34)
at io.mockk.impl.instantiation.AbstractMockFactory.newProxy$default(AbstractMockFactory.kt:24)
at io.mockk.impl.instantiation.AbstractMockFactory.temporaryMock(AbstractMockFactory.kt:127)
at io.mockk.impl.recording.states.RecordingState$call$temporaryMock$1.invoke(RecordingState.kt:69)
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:75)
at io.mockk.impl.recording.CommonCallRecorder.call(CommonCallRecorder.kt:53)
at io.mockk.impl.stub.MockKStub.handleInvocation(MockKStub.kt:269)
at io.mockk.impl.instantiation.JvmMockFactoryHelper$mockHandler$1.invocation(JvmMockFactoryHelper.kt:24)
at io.mockk.proxy.android.advice.Advice.handle$lambda$0(Advice.kt:78)
at io.mockk.proxy.android.advice.Advice.$r8$lambda$y8tfHRaw6Qz3pR6YeNDVMHk1z1U(Unknown Source:0)
at io.mockk.proxy.android.advice.Advice$$ExternalSyntheticLambda0.call(Unknown Source:10)
stackTraceの内容からいかにも、mockkが怪しそう・・・・
localTestはこんなことはありません。最新版の1.13.7でちゃんとテストが動きます
mockkの公式GitHubに情報がありました。
Mockk 1.13.4 incompatible with newest Espresso 3.5.1
Espresso 3.5.1との組み合わせがダメぽいです。
解決
mockKの方で対応したようです。
io.mockk:mockk-android:1.13.8
io.mockk:mockk-agent:1.13.8
で動くようになりました。