如何获取仅含特定子项目测试覆盖其他子项目代码的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
相关产品推荐
相关产品推荐

