KMM项目中无法使用MockK库,求解答本地测试适配疑惑
KMM测试MockK依赖解析错误解惑
问题根源
你遇到的错误核心原因是:MockK仅支持JVM平台,但你的共享模块测试依赖配置把MockK加到了全平台通用的测试范围(比如commonTest)中。KMM项目里,Gradle会为每个目标平台(包括iOS的arm64、simulatorArm64、x64)生成独立的测试任务,哪怕你在本地JVM机器上执行测试,Gradle依然会尝试解析所有平台测试任务的依赖——iOS平台无法找到仅支持JVM的MockK,因此报错。
解决方案
限定MockK的依赖范围
修改共享模块的build.gradle.kts,将MockK仅添加到JVM测试的依赖配置中,不要放到commonTest:sourceSets { val jvmTest by getting { dependencies { implementation("io.mockk:mockk:1.13.2") } } val commonTest by getting { dependencies { // 仅添加跨平台兼容的测试库,如kotest跨平台版 } } }仅执行JVM测试任务
若只想在本地运行共享模块的JVM测试,不要执行默认的./gradlew test(该任务会触发所有平台的测试),直接指定JVM测试任务:./gradlew shared:jvmTest跨平台测试Mock适配(可选)
如果需要在commonTest中编写跨平台测试逻辑,可通过Kotlin的expect/actual机制封装Mock能力:- 在
commonTest中定义预期接口:expect class MockProvider { fun <T> createMock(): T } - 在
jvmTest中用MockK实现实际逻辑:actual class MockProvider { actual fun <T> createMock(): T = mockk() } - 在iOS测试模块中,用兼容iOS的Mock库(如Cuckoo)或空实现完成适配。
- 在
内容的提问来源于stack exchange,提问作者Anand Choudhary
相关产品推荐
相关产品推荐

