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

如何获取仅含特定子项目测试覆盖其他子项目代码的Kover报告

解决Gradle多模块中专用测试子项目的Kover单独覆盖报告问题

场景与问题

我们有一个Gradle多模块项目,settings.gradle.kts配置如下:

include("domain")
include("app")
include("special-e2e-test-suite")

其中special-e2e-test-suite是仅包含src/test目录的专用测试子项目,没有src/main源码目录。执行special-e2e-test-suite:koverHtmlReport命令时会生成空报告——原因很直接:该模块的Kover默认只会识别自身的源码集,而它本身没有主源码,自然无法统计覆盖。

我们的需求是仅生成由special-e2e-test-suite的测试用例覆盖domain和app子项目代码的Kover报告,而根项目合并所有测试的配置(如下)会包含其他测试套件的覆盖结果,不符合需求:

// 根项目build.gradle.kts中不符合需求的配置
dependencies {
 kover(project(":domain"))
 kover(project(":app"))
 kover(project(":special-e2e-test-suite"))
}

解决方案

直接在special-e2e-test-suite模块的build.gradle.kts中配置Kover的覆盖目标和测试任务,明确指定要统计的源码集和执行的测试:

plugins {
    id("kotlin") // 根据项目实际情况替换,比如java或kotlin("jvm")
    id("org.jetbrains.kotlinx.kover")
}

dependencies {
    // 确保测试能正常依赖domain和app模块
    testImplementation(project(":domain"))
    testImplementation(project(":app"))
    // 按需添加其他测试依赖(如JUnit、Mockito等)
}

kover {
    reports {
        html {
            onCheck = false // 可选,避免在check任务中自动触发报告生成
        }
    }
}

koverReport {
    defaults {
        // 指定要统计覆盖的源码集:domain和app的主源码
        sourceSets(project(":domain").sourceSets.main.get(), project(":app").sourceSets.main.get())
        // 指定仅用当前模块的test任务生成覆盖数据
        testTasks(project.tasks.test.get())
    }
}

配置说明

  • sourceSets:明确告诉Kover,我们要统计的是domain和app模块的主源码覆盖情况,而不是当前测试模块的源码(它本身没有)
  • testTasks:指定仅使用当前模块的test任务执行测试并生成覆盖数据,完全隔离其他模块的测试结果
  • 配置完成后,执行./gradlew special-e2e-test-suite:koverHtmlReport就能得到符合需求的报告——仅展示special-e2e-test-suite测试用例对domain和app代码的覆盖情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:41:05