0
0
Android強化月間 - Androidアプリ開発の知見を共有しよう -

AndroidのJUnitテストは超ムズい(6)

Last updated at Posted at 2023-09-14

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
で動くようになりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0