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