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 流程中,生成的覆盖率报告可上传至 CodeCovSonarQube 等平台,帮助团队持续监控代码质量。

以下是一个 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 报告的示例截图:

coverage report summary

报告通常包括类、方法、分支、行和指令的覆盖率统计。例如:

add()multiply() 方法完全覆盖,显示绿色
⚠️ max() 方法部分覆盖,显示黄色
min() 方法未被覆盖,显示红色

7. 总结

Kotlinx-Kover 是一个功能强大且易于集成的 Kotlin 代码覆盖率工具。它不仅支持多种构建系统和项目结构,还提供了丰富的配置选项和可视化报告,适合各种规模的 Kotlin 项目使用。

通过将其集成到开发流程和 CI/CD 管道中,团队可以持续监控代码质量,提升整体代码健壮性与可维护性。如果你正在寻找一个现代化、高效的 Kotlin 覆盖率工具,Kotlinx-Kover 绝对值得一试。


原始标题:A Guide to Kotlinx-Kover: a Kotlin Code Coverage Toolset