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. 重新同步并运行测试
- 点击Android Studio右上角的「Sync Project with Gradle Files」按钮,等待同步完成;
- 执行测试:
- 运行公共测试:终端执行
./gradlew commonTest - 运行Android平台测试:终端执行
./gradlew androidTest
- 运行公共测试:终端执行
额外小提示
你的测试代码有一处逻辑问题:assertEquals(Recipe.toString(), jsonString) 调用的是类的toString()(会输出class Recipe),而非实例的toString(),应该改成assertEquals(recipe.toString(), jsonString),否则测试必然失败。
内容的提问来源于stack exchange,提问作者NerdyGinger
相关产品推荐
相关产品推荐

