Android项目中配置使用kotlin.test报错如何解决?
Android项目使用的AGP(Android Gradle插件)和纯JVM项目的Gradle插件逻辑不同:顶层test {}配置块是java、kotlin("jvm")这类纯JVM插件才会提供的扩展,com.android.application/com.android.library插件不会生成这个顶层扩展,直接照搬JVM项目的配置写test { useJUnitPlatform() }就会抛出找不到test()方法的异常。
另外Kotlin官方文档给出的默认示例全是针对纯JVM平台的,没有覆盖Android场景的特殊配置,直接复制就会踩坑。
以下配置全部写在app模块(或对应library模块)的build.gradle文件中,不要写在根目录的build.gradle里。
1. 添加对应依赖
在dependencies块中添加kotlin.test依赖,注意区分测试类型,kotlin.test版本必须和你项目当前使用的Kotlin插件版本完全一致:
dependencies { // 替换下面的1.9.20为你项目自己的Kotlin版本 // 主机侧单元测试(src/test目录下的用例,运行在本地JVM上) testImplementation "org.jetbrains.kotlin:kotlin-test:1.9.20" testImplementation "org.jetbrains.kotlin:kotlin-test-junit:1.9.20" // 仪器化测试(src/androidTest目录下的用例,运行在安卓设备/模拟器上) androidTestImplementation "org.jetbrains.kotlin:kotlin-test:1.9.20" androidTestImplementation "androidx.test.ext:junit:1.1.5" }
2. 修正测试任务配置
删掉你之前加的顶层test { useJUnitPlatform() }配置,在android {}配置块内添加测试选项即可:
android { // 原有配置(compileSdk、defaultConfig、buildTypes等)全部保留 testOptions { unitTests.all { // 可选:开启后Android框架类的默认方法会返回默认值,避免单元测试抛空指针 isReturnDefaultValues = true } } }
如果确实需要使用JUnit5(JUnit Platform),不能直接写顶层test块,需要额外接入Android JUnit5第三方插件做适配,普通场景下用kotlin-test提供的JUnit4适配层足够稳定,不需要额外引入多余插件
3. 验证配置
在src/test目录下新建测试类,直接使用kotlin.test的API编写用例即可:
import kotlin.test.Test import kotlin.test.assertEquals class SampleTest { @Test fun `addition calculation should return correct result`() { assertEquals(4, 2 + 2) } }
执行测试任务,用例可以正常运行说明配置生效。
- 不要直接复制纯Kotlin/JVM项目的测试配置到Android项目中,AGP对测试任务的封装逻辑和纯JVM插件差异很大,直接照搬大概率报错
- 不要混用kotlin.test和项目Kotlin的版本,版本不匹配会出现类找不到、方法签名异常等问题
- 编写测试时注意导入
kotlin.test.Test注解,不要误导入JUnit或其他测试框架的同名注解
内容的提问来源于stack exchange,提问作者Some random IT boy

