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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 09:33:21