以前はRobotiumを使用してAndroidテストを記述し、Emmaを使用してカバレッジを取得していました。
最近Espressoテストを使用するように変更しましたが、インストルメンテーションテストのカバレッジを取得するのに問題があります。 Robolectricを使用する単体テストのカバレッジのみを取得できます。現在、gradleとJacocoを使用しています。この時点に到達するのに私が見つけた最高のチュートリアルは次のとおりです: https://blog.gouline.net/2015/06/23/code-coverage-on-Android-with-jacoco/
Androidインストルメンテーションを使用するEspressoテストのカバレッジを取得することは可能ですか?
Android gradleプラグインには組み込みの機能があります。
build.gradle
ファイルでtestCoverageEnabled
パラメータをtrue
に設定するだけです。
Android {
buildTypes {
debug {
testCoverageEnabled = true
}
}
}
次に使用します:
./gradlew connectedCheck
または
./gradlew createDebugCoverageReport
モジュールのディレクトリにテストカバレッジレポートが作成されます。
/build/outputs/reports/coverage/debug/
index.html
を開くだけです
例:
カバレッジレポートAndroid with Jacoco (Javaコードカバレッジ)
Android Gradleプラグイン> = 3.x
クラスパスの依存関係に新しいJacocoバージョンを追加する
事業 build.gradle
ファイル
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.Android.tools.build:gradle:3.0.1'
classpath 'org.jacoco:org.jacoco.core:0.8.0'
}
}
アプリbuild.gradle
ファイル
// app/build.gradle
apply plugin: 'com.Android.application'
apply plugin: 'jacoco'
jacoco {
toolVersion = '0.8.0'
}
tasks.withType(Test) {
jacoco.includeNoLocationClasses = true
}
...
タスクを作成します。 jacocoTestReport
task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {
reports {
xml.enabled = true
html.enabled = true
}
def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'Android/**/*.*']
def debugTree = fileTree(dir: "$project.buildDir/intermediates/classes/debug", excludes: fileFilter)
def mainSrc = "$project.projectDir/src/main/Java"
sourceDirectories = files([mainSrc])
classDirectories = files([debugTree])
executionData = fileTree(dir: project.buildDir, includes: [
'jacoco/testDebugUnitTest.exec', 'outputs/code-coverage/connected/*coverage.ec'
])
}
詳細はこちら