Как получить покрытие для проекта Android с помощью тестов Espresso
Раньше я писал тесты для Android с использованием Robotium и получал покрытие с помощью Эммы.
Недавно я перешел на использование тестов эспрессо, и у меня возникли проблемы с получением покрытия тестов приборостроения. Я могу получить покрытие только для юнит-тестов, которые используют Robolectric. В настоящее время я использую Gradle и Jacoco для этого. Лучший учебник, который я нашел, который помог мне добраться до этой точки, был: https://blog.gouline.net/2015/06/23/code-coverage-on-android-with-jacoco/
Можно ли получить покрытие тестов Эспрессо, в которых используется инструментарий Android?
1 ответ
Плагин для Android имеет встроенную функцию.
Просто установите testCoverageEnabled
параметр для true
в вашем build.gradle
файл:
android {
buildTypes {
debug {
testCoverageEnabled = true
}
}
}
Тогда используйте:
./gradlew connectedCheck
или же
./gradlew createDebugCoverageReport
Он выдаст отчет о тестовом покрытии в каталоге модуля:
/build/outputs/reports/coverage/debug/
Просто откройте index.html
Пример:
Отчет о покрытии в Android с Jacoco (покрытие кода Java)
Плагин Android Gradle>=3.x
добавить новую версию Jacoco в зависимости classpath
проект 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'
])
}
Узнайте больше здесь