記録

主にAndroidアプリ開発に関する知見やその周辺に関わることについて記事をかいています

Androidアプリのマルチモジュールでユニットテストの結果をlintチェック結果と一緒にDangerでコメントする

前回、マルチモジュールでlintチェック結果をまとめてDangerでコメントする方法についての記事をかいた。

m4kvn.hatenablog.com

今回はこれのユニットテスト版もやってみようという話。ユニットテストの結果をDangerでコメントするためには orta/danger-junit というプラグインを利用する。

danger-junitでは、複数のファイルをパースする仕組みがあるので、lintチェック結果をコメントするときみたいにファイルを1つにまとめる必要がない。なので、まずはユニットテスト結果のファイルを集めてくる処理を考える。

ユニットテスト結果のファイルを集める

ユニットテスト結果のファイルは、各モジュールの build/test-results 配下に出力される。例えば、DevelopmentDebugというBuildVariantを指定した./gradlew testDevelopmentDebugUnitTest を実行した場合は、./app/build/test-results/testDevelopmentDebugUnitText/TEST-hogehoge.xml みたいなファイルが出力されている。

これらのファイルを集めてくるためにプロジェクトのルートフォルダで find . | grep "TEST-*" と実行してみる。

❯❯❯❯ find . | grep "TEST-*"
./app/build/test-results/testDevelopmentDebugUnitTest/TEST-hogehoge.xml
./modules/piyo/build/test-results/testDevelopmentDebugUnitTest/TEST-piyopiyo.xml
./modules/makun/build/test-results/testDevelopmentDebugUnitTest/TEST-makunmakun.xml

すると、こんな感じにファイルの相対パスを一覧で取得できる。これをDangerfile内でdanger-junitにわたしparseしてあげれば良さそう。

Dangerfileに設定を記述する

さきほどの出力を .split("\n") してあげるとそれぞれの相対パスとして each でまわせるので、それを利用して junit.parse してあげる処理をDangerfileに記述します。

`find . | grep "TEST-*"`.split("\n").each do |path|
    junit.parse(path)
    junit.report
end

これをandroid_lintの前に実行するよう記述すれば良さそう。

`find . | grep "TEST-*"`.split("\n").each do |path|
    junit.parse(path)
    junit.report
end

android_lint.skip_gradle_task = true
android_lint.filtering = false
android_lint.report_file = "build-reports/lint-results.xml"
android_lint.lint(inline_mode: true)

Bitriseでの実行結果

前回と同じようにBitrise上でこれを動かしてみる。

f:id:m4kvn:20190729164208p:plain

するとこんな感じにandroid_lintと一緒にコメントしてくれる。