如何在KMM项目中通过Gradle运行指定Kotest测试类?
在KMM项目中使用Gradle运行指定Kotest测试
背景
之前在kotest-examples-multiplatform示例项目中,我可以通过命令gradle :jvmTest --tests DataDrivenTest运行commonTest模块中的单个测试。但我通过KMM创建了仅支持iOS和Android的新项目,配置好Kotest依赖后,虽然能通过gradle check正常运行所有测试,但不清楚如何仅运行指定测试类,同时希望能针对单个目标(如Android本地或iOS模拟器)执行指定测试。
已完成的Kotest依赖配置
libs.versions.toml内容:
kotest = "5.8.0" [libraries] kotest-assertions-core = { module = "io.kotest:kotest-assertions-core", version.ref = "kotest" } kotest-framework-engine = { module = "io.kotest:kotest-framework-engine", version.ref = "kotest" } [plugins] kotestMultiplatform = { id = "io.kotest.multiplatform", version.ref = "kotest" }
根目录build.gradle.kts内容:
alias(libs.plugins.kotestMultiplatform) apply false
:shared模块build.gradle.kts内容:
plugins { alias(libs.plugins.kotestMultiplatform) } sourceSets { commonMain.dependencies { // 多平台依赖 } commonTest.dependencies { implementation(libs.kotest.assertions.core) implementation(libs.kotest.framework.engine) implementation(kotlin("test")) } }
测试类示例
在:shared:commonTest中添加了两个测试类:
class FailTest : StringSpec({ "fail test" { true shouldBe false } }) class SuccessTest : StringSpec({ "success test" { true shouldBe true } })
解决方案
1. 针对单个目标运行所有测试
- Android本地目标:
gradle :shared:androidUnitTest - iOS模拟器(Arm64架构)目标:
gradle :shared:iosSimulatorArm64Test
2. 针对单个目标运行指定测试类
Android本地目标
使用--tests参数指定测试类,支持简单类名(如果类名唯一)或完整包名+类名:
# 运行SuccessTest类 gradle :shared:androidUnitTest --tests SuccessTest # 如果有重名类,使用完整包名 gradle :shared:androidUnitTest --tests "com.yourpackage.SuccessTest"
iOS模拟器目标
iOS平台的测试命令格式类似,注意目标任务名是iosSimulatorArm64Test:
# 运行SuccessTest类 gradle :shared:iosSimulatorArm64Test --tests SuccessTest # 完整包名写法 gradle :shared:iosSimulatorArm64Test --tests "com.yourpackage.SuccessTest"
3. 运行单个测试方法
如果需要运行测试类中的某个具体方法,在类名后加上方法名(注意方法名的引号要转义或用单引号包裹):
# Android目标运行单个测试方法 gradle :shared:androidUnitTest --tests "SuccessTest.success test" # iOS目标运行单个测试方法 gradle :shared:iosSimulatorArm64Test --tests 'SuccessTest.success test'
注意事项
- 确保测试类的包名正确,使用完整包名可以避免类名冲突导致的匹配错误。
- 如果使用Kotest的标签(Tags)特性,也可以通过
-Pkotest.tags=YourTag参数过滤测试,比如:gradle :shared:androidUnitTest -Pkotest.tags=SuccessTag
内容的提问来源于stack exchange,提问作者kojot
相关产品推荐
相关产品推荐

