最近、Androidアプリのカバレッジを自動チェックするGradleプラグインを書いたのですが、カバレッジをチェックするプラグインにも関わらず、プラグイン自身のカバレッジが という惨憺たる状況だったのでテスト/カバレッジ環境を構築してみました。
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
# 以下に出力されるはず
build/reports/tests/index.html
良い感じですね
カバレッジについて
JaCoCo
テストを書くための環境ができたので、次はカバレッジを計測できるようにしてみます。
計測にはJaCoCoを使用しました。
JaCoCoを選んだ理由は以下の3点です。
- Gradleの標準でプラグインが用意されている
- Android Gradle Pluginでもサポートされている
- AndroidCoverageCheckプラグインでドッグフーディングできそうだったから
3つ目に関しては後の項目で触れます。
環境構築
上で述べたようにGradleの標準でプラグインが用意されているため、以下のように宣言するのみで使用可能です。
apply plugin: 'jacoco'
加えて今回はXMLレポート機能を有効にします(AndroidCoverageCheckプラグインで使用するため)。
jacocoTestReport {
reports {
xml.enabled = true
}
}
実行
# レポートを生成するだけならjacocoTestReportタスクのみでOK
./gradlew test jacocoTestReport
結果
# 出力先を変更していなければ以下に出力されるはず
build/reports/jacoco/test/html/index.html
良い感じですね
AndroidCoverageCheckプラグインのドッグフーディングについて
自分のアプリでドッグフーディングするのは勿論ですが、AndroidCoverageCheckプラグイン自身の開発でもドッグフーディングできるに越したことはないので、その設定をしました。
AndroidCoverageCheckプラグインの設定
XMLレポートのデフォルト出力先が、Android Gradle PluginからJaCoCoを使用した時と違うので、以下のように指定しました。
String[] reportXmlPath = ["**/jacoco/**/jacocoTestReport.xml"];
androidCoverageCheck {
isBuildFailure false
instruction 80
branch 80
reportXml reportXmlPath
}
実際のbuild.gradle
AndroidCoverageCheckプラグインの詳細な導入手順はこちらを参照していただければと思います。
実行
# テストとカバレッジレポート生成とカバレッジチェックを実行
./gradlew test jacocoTestReport androidCoverageCheck
結果
良い感じですね
(まだ、かなり赤いですが、とりあえずこの記事では環境を構築するところまでとしているので、今後に期待です )
さいごに
とりあえず、テスト/カバレッジ環境が構築できたので、ドッグフーディングしながらテストを増やしていければと思います