build.gradleの設定
Code Coverage機能を使用するために、app直下のbuild.gradleに追加します。android { buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } + debug { + testCoverageEnabled = true + } } }
複数のProjectをImportしている場合、各モジュールのbuild.gradleにtestCoverageEnabledを追加します。
Code Coverageの実行
Terminalから次のコマンドを実行します。./gradlew createDebugCoverageReport
createDebugCoverageReportを実行すると、自動的にandroidTestを行います。
デバイス(or エミュレータ)が起動していない場合、次のようなエラーが表示されます。
:app:connectedAndroidTest FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:connectedAndroidTest'. > com.android.builder.testing.api.DeviceException: java.lang.RuntimeException: No connected devices!
必ずデバイスかエミュレータを起動して、androidTestを実行できる環境にしておきましょう。
レポートの観覧
createDebugCoverageReportが成功すると、各モジュールのOutputにレポートを保存します。[PROJECT]/app/build/outputs/reports/coverage/debug/index.html
次のような表が出力されます。コードの全ライン数に対して、テストが実行されたラインが統計的に確認する事ができます。
次のように視覚的に、どのコードがテストされていないか確認することも可能です。
いつも参考にしております。突然の質問で恐縮ですが、
返信削除espressoやuiautomatorをJUnit4ベースで実行した場合にコードカバレッジが取得できない
(網羅率0%でカウントされる)現象に陥ります。こちらについて解決策はご存知でしょうか。
jacoco version = '0.7.2.201409121644'
AndroidStudioは1.2、uiautomator-v18:2.1.0、espresso-core:2.1
を使用しています。
TestCaseを継承した一般的なテストケースの場合は問題ないのですが...
AndroidJUnitRunnerの指定が引き金になっているのではないかと思っています。
もしご存知でしたらご教授いただけると幸いです。
すみません。自己解決しました。
削除espresso-core:2.1とappcompat-v7:22.1.1の組み合わせでconflict解消のため
ライブラリの依存性記述を弄っていたところに問題があったようです。
espresso-core:2.0とすることでカバレッジが正常に取得できました。
お騒がせしました。