Help us understand the problem. What is going on with this article?

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

More than 3 years have 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

スクリーンショット 2016-02-09 1.58.00.png

HTMLレポート
# 以下に出力されるはず
build/reports/tests/index.html 

スクリーンショット 2016-02-09 2.00.51.png

良い感じですね :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 

スクリーンショット 2016-02-09 2.25.39.png

良い感じですね :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

結果

スクリーンショット 2016-02-09 2.38.35.png

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

さいごに

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

shikato
Software Engineerをやっている人間です。きんいろモザイクが好きでした。
http://alexam.hateblo.jp/
yahoo-japan-corp
Yahoo! JAPAN を運営しています。
https://www.yahoo.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away