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

Kotlin Multiplatform Gradle单元测试无法解析kotlin.test引用

解决Kotlin Multiplatform项目中@Test注解未解析的问题

看起来你的问题出在测试依赖配置的重复与缺失上——IDE能识别@Test注解是因为它读取了依赖声明,但Gradle编译时没有正确加载跨平台测试库的依赖。下面是一步步的修复方案:

1. 调整插件应用顺序与写法

先统一用现代plugins块声明插件,确保kotlin-multiplatform先于com.android.library应用,这样KMP能正确配置Android的源集:

plugins {
    id("org.jetbrains.kotlin.multiplatform") version "1.3.72" // 序列化0.9.1适配Kotlin 1.3.x版本,按需调整
    id("com.android.library")
    id("org.jetbrains.kotlinx.serialization") version "0.9.1"
}

2. 清理并修正测试依赖配置

你的build.gradle存在重复依赖和不必要的测试依赖引入,下面是优化后的sourceSets配置:

kotlin {
    android { }
    iosArm64 {
        binaries { executable() }
    }
    iosX64 {
        binaries { executable() }
    }
    sourceSets {
        commonMain {
            dependencies {
                implementation kotlin("stdlib-common")
                implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.9.1")
            }
        }
        commonTest {
            dependencies {
                // kotlin("test") 已自动包含test-common和test-annotations-common,无需重复添加
                implementation kotlin("test")
                implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.9.1") // 测试需要序列化时保留
            }
        }
        androidMain {
            dependencies {
                implementation kotlin("stdlib")
                implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.9.1")
                // 移除此处的测试依赖,主代码不需要测试库
            }
        }
        // 新增Android平台测试的依赖配置(如需在Android设备运行测试)
        androidTest {
            dependencies {
                implementation kotlin("test-junit")
                implementation junit("junit:junit:4.13.2")
            }
        }
        iosMain { }
    }
}

3. 确认测试类的存放位置

确保RecipeTest.kt放在**src/commonTest/kotlin/**目录下——这是KMP公共测试代码的标准目录。如果误放在androidTest目录下,需要改用org.junit.Test注解,而非kotlin.test.Test。

4. 重新同步并运行测试

  1. 点击Android Studio右上角的「Sync Project with Gradle Files」按钮,等待同步完成;
  2. 执行测试:
    • 运行公共测试:终端执行 ./gradlew commonTest
    • 运行Android平台测试:终端执行 ./gradlew androidTest

额外小提示

你的测试代码有一处逻辑问题:assertEquals(Recipe.toString(), jsonString) 调用的是类的toString()(会输出class Recipe),而非实例的toString(),应该改成assertEquals(recipe.toString(), jsonString),否则测试必然失败。

内容的提问来源于stack exchange,提问作者NerdyGinger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:31:22