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メニューの中に移動された様子
何かもう一工夫すれば、もっとステップ減らせるかも。