You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KMM项目中无法使用MockK库,求解答本地测试适配疑惑

KMM测试MockK依赖解析错误解惑

问题根源

你遇到的错误核心原因是:MockK仅支持JVM平台,但你的共享模块测试依赖配置把MockK加到了全平台通用的测试范围(比如commonTest)中。KMM项目里,Gradle会为每个目标平台(包括iOS的arm64、simulatorArm64、x64)生成独立的测试任务,哪怕你在本地JVM机器上执行测试,Gradle依然会尝试解析所有平台测试任务的依赖——iOS平台无法找到仅支持JVM的MockK,因此报错。

解决方案

  1. 限定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跨平台版
            }
        }
    }
    
  2. 仅执行JVM测试任务
    若只想在本地运行共享模块的JVM测试,不要执行默认的./gradlew test(该任务会触发所有平台的测试),直接指定JVM测试任务:

    ./gradlew shared:jvmTest
    
  3. 跨平台测试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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:10:33