你要做到以下几点:
- 运行单元测试:
gradlew testDebug
- 运行Android测试:
gradlew connectedDebugAndroidTest
- 为Android测试创建的代码覆盖率:
gradlew createDebugCoverageReport
- 完成这些步骤后,你可以使用单个任务将它们最终结合起来
应用testCoverageEnabled
:
android {
buildTypes {
debug {
testCoverageEnabled true
}
}
}
应用includeNoLocationClasses
:
android {
testOptions {
unitTests.all {
jacoco {
includeNoLocationClasses = true
}
}
}
}
现在,您可以创建这样一个任务:
apply plugin: 'jacoco'
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: "${buildDir}/intermediates/classes/debug", excludes: fileFilter)
def mainSrc = "${project.projectDir}/src/main/java"
sourceDirectories = files([mainSrc])
classDirectories = files([debugTree])
executionData = fileTree(dir: "$buildDir", includes: [
"jacoco/testDebugUnitTest.exec",
"outputs/code-coverage/connected/*coverage.ec"
])
}
并运行它:
gradle clean jacocoTestReport
来源:https://medium.com/@rafael_toledo/setting-up-an-unified-coverage-report-in-android-with-jacoco-robolectric-and-espresso-ffe239aaf3fa
您是否使用'createDebugCoverageReport'只是单元测试或Android测试+单元测试? –
我想结合两者,但目前只是android测试。 – Thorinside