1. 简介
在软件开发不断演进的今天,代码覆盖率工具已成为确保代码质量和可靠性的关键一环。随着 Kotlin 因其简洁语法和与 Java 的良好互操作性而迅速流行,围绕其构建的质量保障工具也日益成熟。
Kotlinx-Kover 是 JetBrains 推出的 Kotlin 专用代码覆盖率工具,支持 Maven 和 Gradle 构建系统,是 Kotlin 开发者不可或缺的工具之一。本文将深入介绍 Kotlinx-Kover 的特性、配置方式以及在实际项目中的应用,帮助你更好地将其集成到 Kotlin 项目中。
2. Kotlinx-Kover 的核心功能
Kotlinx-Kover 是一个专为 Kotlin 项目设计的代码覆盖率插件,兼容 Kotlin JVM 和 Kotlin Multiplatform 项目,同时支持 Kotlin 与 Java 混合代码的覆盖率分析。它底层基于 JaCoCo 库,可以生成 HTML、XML 等常见格式的报告。
以下是其主要特性:
✅ 支持 JVM 测试的覆盖率报告(目前不支持 JS 和 Native)
✅ 提供 HTML 和 XML 格式的完整覆盖率报告
✅ 支持覆盖率验证规则,设定覆盖率阈值
✅ 支持 Android 项目(包括构建变体),但目前不支持设备上的 Instrumentation 测试
3. 安装与基础配置
将 Kover 插件添加到 build.gradle.kts 文件非常简单,只需几行配置即可完成集成。运行 mvn kover:report-html
后,会在项目目录下的 ./target/site/kover
中生成 XML 和 HTML 格式的覆盖率报告。
生成的 html/index.html
即为可视化报告,便于分析覆盖率数据。
Maven 插件配置示例:
<plugin>
<groupId>org.jetbrains.kotlinx</groupId>
<artifactId>kover-maven-plugin</artifactId>
<version>0.8.3</version>
</plugin>
基础配置(pom.xml):
<configuration>
<filters>
<excludes>
<classes>com.baeldung.code.not.covered.NotCoveredClass</classes>
</excludes>
</filters>
<rules>
<rule>
<bounds>
<bound>
<minValue>80</minValue> <!-- 最低覆盖率要求 -->
</bound>
</bounds>
</rule>
</rules>
</configuration>
上述配置中,我们设置了类过滤器和覆盖率验证规则。minValue
表示最低覆盖率阈值,低于该值构建将失败。
4. 高级配置
Kotlinx-Kover 提供了丰富的高级配置选项,以满足复杂项目的需求。本节重点介绍过滤器和验证规则的使用。
4.1 过滤器配置
通过过滤器,我们可以精确控制哪些类、包或带特定注解的代码参与覆盖率分析。
例如,我们可以排除某个类或整个包:
<configuration>
<filters>
<excludes>
<classes>com.baeldung.code.not.covered.NotCoveredClass,com.baeldung.code.not.covered.*</classes>
<annotatedBy>com.baeldung.annotations.ExcludeFromCoverage</annotatedBy>
</excludes>
<includes>
<classes>com.baeldung.code.covered.CoveredClass</classes>
</includes>
</filters>
</configuration>
✅ excludes
:用于排除不需要统计覆盖率的类或注解
✅ includes
:仅包含指定类参与覆盖率统计
4.2 验证规则配置
Kover 支持基于不同指标(如行覆盖率、分支覆盖率)设置验证规则,确保项目达到预设的质量标准。
<rules>
<rule>
<name>基础行覆盖率</name>
<bounds>
<bound>
<aggregationForGroup>COVERED_PERCENTAGE</aggregationForGroup>
<coverageUnits>LINE</coverageUnits>
<maxValue>100</maxValue>
<minValue>80</minValue>
</bound>
</bounds>
</rule>
<rule>
<name>分支覆盖率</name>
<bounds>
<bound>
<aggregationForGroup>COVERED_PERCENTAGE</aggregationForGroup>
<coverageUnits>BRANCH</coverageUnits>
<minValue>20</minValue>
</bound>
</bounds>
</rule>
</rules>
✅ coverageUnits
可选值包括 LINE
(行)、BRANCH
(分支)等
✅ minValue
为最低覆盖率阈值,若未达标则构建失败
5. 在 CI/CD 流水线中的使用
Kotlinx-Kover 可以无缝集成到 CI/CD 流程中,生成的覆盖率报告可上传至 CodeCov 或 SonarQube 等平台,帮助团队持续监控代码质量。
以下是一个 GitHub Action 的示例流水线:
name: Kotlin Code Coverage
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Build with Maven
run: ./mvnw install
- name: Run Kover
run: ./mvnw kover:report-html
- name: Upload Coverage to CodeCov
uses: codecov/codecov-action@v2
with:
files: ./target/site/kover/report.xml
fail_ci_if_error: true
⚠️ 注意:确保 files
路径正确指向生成的 XML 报告文件,否则上传会失败。
6. Kover 报告输出
Kover 提供了多种任务来生成不同格式的报告,包括控制台输出(kover:log
)和 HTML 报告(kover:report-html
)。
以下是 HTML 报告的示例截图:
报告通常包括类、方法、分支、行和指令的覆盖率统计。例如:
✅ add()
和 multiply()
方法完全覆盖,显示绿色
⚠️ max()
方法部分覆盖,显示黄色
❌ min()
方法未被覆盖,显示红色
7. 总结
Kotlinx-Kover 是一个功能强大且易于集成的 Kotlin 代码覆盖率工具。它不仅支持多种构建系统和项目结构,还提供了丰富的配置选项和可视化报告,适合各种规模的 Kotlin 项目使用。
通过将其集成到开发流程和 CI/CD 管道中,团队可以持续监控代码质量,提升整体代码健壮性与可维护性。如果你正在寻找一个现代化、高效的 Kotlin 覆盖率工具,Kotlinx-Kover 绝对值得一试。