我曾经使用Robotium编写Android测试并使用Emma检索覆盖率。
最近我改为使用Espresso测试,我在检索Instrumentation测试的覆盖范围时遇到了麻烦。我只能检索使用Robolectric的单元测试的覆盖范围。我目前正在使用gradle和Jacoco来做到这一点。我找到的帮助我达到这一点的最佳教程是:{{3}}
是否可以检索使用Android检测的Espresso测试的覆盖范围?
答案 0 :(得分:21)
android gradle插件具有内置功能。</ p>
只需将testCoverageEnabled
参数设置为true
文件中的build.gradle
:
android {
buildTypes {
debug {
testCoverageEnabled = true
}
}
}
然后使用:
./gradlew connectedCheck
或
./gradlew createDebugCoverageReport
它将在模块目录中生成测试覆盖率报告:
/build/outputs/reports/coverage/debug/
只需打开index.html
示例:
答案 1 :(得分:0)
带有Jacoco(Java代码覆盖率)的Android中的覆盖率报告
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'
])
}
在此处了解更多信息