Kotlin Native项目执行koverReport无输出,覆盖率报告未生成
解决Kover在Kotlin Native项目中无法生成覆盖率报告的问题
问题根源
- 你的Native目标仅配置了可执行文件(
executable),未创建测试二进制,Kover找不到对应的测试任务 koverReport任务未绑定测试执行流程,没有覆盖率数据时直接跳过报告生成步骤- 默认配置下Kover不会自动关联Kotlin Native的源代码集和测试目标
修复方案
1. 为Native目标添加测试二进制配置
在nativeTarget.apply的binaries块中补充测试配置:
nativeTarget.apply { binaries { executable { entryPoint = "main" } // 添加测试二进制配置 test { // 可选:指定测试运行器,默认使用Kotlin/Native自带的即可 } } }
2. 显式配置Kover的覆盖范围
在build.gradle.kts中添加Kover专属配置块,明确要覆盖的代码和关联的测试任务:
kover { reports { html { enabled = true outputDir = file("$buildDir/reports/kover/html") } xml { enabled = true outputFile = file("$buildDir/reports/kover/report.xml") } } coverageEngine.set(kotlinx.kover.api.CoverageEngine.INTELLIJ) } koverMerged { // 关联通用和Native的源代码集 sourceSets(project.kotlin.sourceSets.commonMain, project.kotlin.sourceSets.nativeMain) // 绑定Native测试任务 testTasks(project.tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinNativeTest>()) }
3. 确保测试任务优先执行
有两种方式触发完整的测试+报告生成流程:
# 方式1:直接运行check任务,自动执行测试并生成覆盖率报告 ./gradlew check # 方式2:先执行Native测试,再生成报告 ./gradlew nativeTest koverReport
4. 验证结果
修改配置后重新运行任务,日志中会看到nativeTest任务执行,koverHtmlReport和koverXmlReport不再被跳过,最终会在build/reports/kover目录下生成对应的HTML和XML报告文件。
补充说明
- Kover 0.6.x配合Kotlin 1.8.x时,Native测试需要显式配置二进制,后续版本可能会优化自动识别逻辑
- 确保
nativeTest源代码集内有实际的测试用例,否则生成的报告覆盖率会显示为0
内容的提问来源于stack exchange,提问作者leung018
相关产品推荐
相关产品推荐

