1
0

More than 1 year has passed since last update.

Kover によるカバレッジレポート出力について、対象クラスを限定する

Posted at

この記事は「Kover でらくらく! Android のカバレッジレポート出力」の応用編となります。

はじめに

先日公開した記事では、Android のローカル単体テストのカバレッジレポート出力について、以前から使われていた JaCoCo Plugin より設定が簡単な Kover を使って、CI でカバレッジレポートを出力する Gradle タスクを実行し Codecov にアップロードしてチーム共有を行う方法を説明しました。

応用編として対象クラスを限定する方法を紹介

今回は前回説明しなかった対象クラスを限定する設定を紹介することで、Codecov を使わないケースでも Kover を適切に扱う方法を紹介します。また、Codecov の有無は問わず、例えば ViewModel に限定したカバレッジレポートがほしいケースにも対応します。

前提条件

この記事では、前回の記事で紹介した Gradle の設定はすでに完了している前提で解説します。

Codecov を使わずに HTML 形式のカバレッジレポートを運用する例

Codecov は有料サービスのため予算の制約があるチームでは使えないことがあります。2023年7月7日現在、年額プランで1人10ドル/月かかります。(個人開発や学習等で1人で使う場合は月 250 PUSH まで無料です。)また自社セキュリティポリシーに合わないケースもあると思います。その場合は HTML 形式のカバレッジレポートを出力して運用する方法があります。例えば GitHub Actions にはビルドの生成物である Artifacts をアップロードする機能があります。

.github/workflows/check.yml
name: check
on:
  push:
    branches:
      - main
  pull_request:
    types:
      - opened
      - synchronize
      - reopened
jobs:
  check:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - uses: actions/setup-java@v3
        with:
          distribution: 'adopt'
          java-version: '17'
      - uses: gradle/gradle-build-action@v2
      # 単体テストの実行 + HTML 形式のカバレッジレポート出力
      - run: ./gradlew koverHtmlReportDebug
      # Artifacts としてカバレッジレポートをアップロード
      - uses: actions/upload-artifact@v3
        with:
          # ファイル名は coverage.zip
          name: coverage
          # カバレッジレポート出力先ディレクトリ
          path: app/build/reports/kover/htmlDebug/

ワークフローの実行結果の Summary から ZIP 形式でダウンロードできます。

スクリーンショット 2023-07-07 0.22.17.png

しかし、前回の説明だけでは Hilt 等によって自動生成されたクラスも HTML 形式のカバレッジレポートに載ってしまいます。今回は必要な情報だけを HTML 形式のカバレッジレポートに載せる方法を解説します。

スクリーンショット 2023-07-07 0.32.03.png

カバレッジレポート対象クラスを限定する

前回の説明だけでは、Codecov を使用してリポジトリ上の kt ファイルに限定しても、通常ローカル単体テストを書くことが無い Activity や Composable 関数等もカバレッジレポートに含まれてしまいます。ここでは Kover の設定によって、無駄の無いカバレッジレポートの作成を目指します。

カバレッジレポートの例

すべてのクラスを対象にしたカバレッジレポート

スクリーンショット 2023-07-08 0.44.35.png

スクリーンショット 2023-07-08 0.57.17.png

単体テスト対象のクラスだけを対象にしたカバレッジレポート

スクリーンショット 2023-07-08 0.42.32.png

設定方法

設定方法は公式ドキュメント「Kover Gradle Plugin」の Filtering reports 節にあります。

koverReport filters includes ブロックで対象クラスを指定して excludes ブロックで除外するクラスを指定できます。* でその部分が任意のパッケージ名およびクラス名にマッチします。

例えば ViewModel クラスに限定してカバレッジレポートを出力したい場合は app モジュールの build.gradle にこのように書きます。

app/build.gradle
koverReport {
    filters {
        includes {
            classes("*ViewModel")
        }
    }
}

もしインターフェースと実装クラスが別にある場合は間違えないようにご注意ください。実装クラスの方を指定します。

また、例えば HiltRoom による自動生成クラスを除外したい場合はこのように書きます。

app/build.gradle

koverReport {
    filters {
        excludes {
            classes(
                    "*.BuildConfig",
                    // Hilt による自動生成
                    "hilt_aggregated_deps.*", "dagger.*", "*_Factory", "*_*Factory*",
                    "*.Hilt_*", "*_HiltModules*",
                    // Room による自動生成
                    "*_Impl*",
            )
        }
    }
}

このあたりは、使用するライブラリやそのバージョンによっても異なるので koverHtmlReportDebug Gradle タスクで HTML 形式のカバレッジレポートを出力しながら調整するのが良いと思います。後ろの * はサブクラス含めてを除外するために使っています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0