Android Instrumentation Testで特定クラスのcoverageを出力する


JVMのテストは1テスト、あるいは1テストクラスごとにcoverageを簡単に確認できる。
が、instrumentation testで同じようなことをする方法がわからず、CI任せにしていた。

でもやっぱりローカルでも見られるようにしたい

1. Run Test

CLIの場合

adb shell am instrument -w -r --no_window_animation -e emma true -e class 'your.app.package.TestClassName', -e coverage true your.app.package.test/android.support.test.runner.AndroidJUnitRunner

(不要なパラメータあるかも)

Android Studioの場合

Run/Debug ConfigurationsにAndroid Instrumentation Testを追加。
Module、Class(あるいはMethod)にテスト対象を設定。
Instrumentation argumentsに下記パラメータを追加。

  • coverage: true
  • emma: true

2. Get coverage

adb pull /data/data/your.app.package/files/coverage.ec ./coverage.exec

libraryのテストの場合、your.app.package.testに保存されてる様子。
上記パスはemulatorの場合。実機だとパスが違うっぽい。

coverageFileパラメータで保存先を指定もできる

cf. https://developer.android.com/studio/test/command-line?hl=ja#AMOptionsSyntax

3. Open coverage

Android Studio上で見る場合は、下記メニューから、pullしたcoverage.execを選択
Analyze -> Show Code Coverage

Analyze -> Generate Coverage ReportでHTML出力もできる

Android Studio 4からは、Runメニューの中に移動された様子


何かもう一工夫すれば、もっとステップ減らせるかも。