Edited at

Gradle Pluginのテスト/カバレッジ環境構築 & ドッグフーディング

More than 1 year has passed since last update.

最近、Androidアプリのカバレッジを自動チェックするGradleプラグインを書いたのですが、カバレッジをチェックするプラグインにも関わらず、プラグイン自身のカバレッジが :zero: という惨憺たる状況だったのでテスト/カバレッジ環境を構築してみました。

Groovyでテストコードを書いたりするのは初めてだったのですが、案外すぐに環境を構築することができました。


テストについて


環境構築

とりあえず以下のようなディレクトリ構成にするのみでOKでした。

src

|-- main
| |-- groovy/{{packageName}}
|-- test
|-- groovy/{{packageName}} # テストコードdir

実際のディレクトリ


テストコード&実行&結果

Groovyといえば元祖PowerAssertということで(確か)、以下のようなテストコードを書いて実行すると、PowerAssertな結果を表示してくれます。

class ShikatoTest {

@Test
void sum1() {
def expected = 2;
assert 1 + 1 == expected;
}

@Test
void sum2() {
// あえて失敗させる
def expected = 2;
assert 1 + 2 == expected;
}
}


実行

# --infoオプションをつけないとコンソール上でPowerAssertな結果は表示してくれなかった

#(--infoなくてもhtmlレポート上ではPowerAssertな結果を表示してくれる)
./gradlew test --info


HTMLレポート

# 以下に出力されるはず

build/reports/tests/index.html

良い感じですね :bangbang::smile:


カバレッジについて


JaCoCo

テストを書くための環境ができたので、次はカバレッジを計測できるようにしてみます。

計測にはJaCoCoを使用しました。

JaCoCoを選んだ理由は以下の3点です。

3つ目に関しては後の項目で触れます。


環境構築

上で述べたようにGradleの標準でプラグインが用意されているため、以下のように宣言するのみで使用可能です。


build.gradle

apply plugin: 'jacoco'


加えて今回はXMLレポート機能を有効にします(AndroidCoverageCheckプラグインで使用するため)。


build.gradle

jacocoTestReport {

reports {
xml.enabled = true
}
}

実際のbuild.gradle


実行


実行

# レポートを生成するだけならjacocoTestReportタスクのみでOK

./gradlew test jacocoTestReport


結果


HTMLレポート

# 出力先を変更していなければ以下に出力されるはず

build/reports/jacoco/test/html/index.html

良い感じですね :bangbang::smile:


AndroidCoverageCheckプラグインのドッグフーディングについて

自分のアプリでドッグフーディングするのは勿論ですが、AndroidCoverageCheckプラグイン自身の開発でもドッグフーディングできるに越したことはないので、その設定をしました。


AndroidCoverageCheckプラグインの設定

XMLレポートのデフォルト出力先が、Android Gradle PluginからJaCoCoを使用した時と違うので、以下のように指定しました。


build.gradle

String[] reportXmlPath = ["**/jacoco/**/jacocoTestReport.xml"];

androidCoverageCheck {
isBuildFailure false
instruction 80
branch 80
reportXml reportXmlPath
}


実際のbuild.gradle

AndroidCoverageCheckプラグインの詳細な導入手順はこちらを参照していただければと思います。


実行


実行

# テストとカバレッジレポート生成とカバレッジチェックを実行

./gradlew test jacocoTestReport androidCoverageCheck


結果

良い感じですね :bangbang::smile:

(まだ、かなり赤いですが、とりあえずこの記事では環境を構築するところまでとしているので、今後に期待です :innocent:


さいごに

とりあえず、テスト/カバレッジ環境が構築できたので、ドッグフーディングしながらテストを増やしていければと思います :octocat: