To generate code coverage for Unit and Ui tests I've implemented this jacoco.gradlescript
apply plugin: 'jacoco'
jacoco {
toolVersion = "0.8.5"
}
tasks.withType(Test) {
jacoco.includeNoLocationClasses = true
}
project.afterEvaluate {
android.applicationVariants.all { variant ->
def variantName = variant.name
def testTaskName = "test${variantName.capitalize()}UnitTest"
def uiTestCoverageTaskName = "create${variantName.capitalize()}CoverageReport"
tasks.create(
name: "${testTaskName}Coverage",
type: JacocoReport,
dependsOn: ["$testTaskName", "$uiTestCoverageTaskName"]) {
group = "Reporting"
description = "Generate Jacoco coverage reports for the ${variantName.capitalize()} build."
reports {
html.enabled = true
xml.enabled = true
}
def excludes = [
'**/R.class',
'**/R$*.class',
'**/BuildConfig.*',
'**/Manifest*.*',
'**/*Test*.*',
'android/**/*.*',
'**/*Application*.*',
'**/*Dagger*.*',
'**/*Hilt*.*',
'**/*GeneratedInjectorModuleDeps*.*'
]
def javaClasses = fileTree(dir: variant.javaCompiler.destinationDir, excludes: excludes)
def kotlinClasses = fileTree(dir: "${buildDir}/tmp/kotlin-classes/${variantName}", excludes: excludes)
classDirectories.setFrom(files([javaClasses, kotlinClasses]))
sourceDirectories.setFrom(
files([
"$project.projectDir/src/main/java",
"$project.projectDir/src/${variantName}/java",
"$project.projectDir/src/main/kotlin",
"$project.projectDir/src/${variantName}/kotlin"
]))
executionData.setFrom(
files([
"${project.buildDir}/jacoco/${testTaskName}.exec",
"${project.buildDir}/outputs/code_coverage/${variantName}AndroidTest/connected/*coverage.ec"
])
)
}
}
}
I've apply this script in my app.build like this apply from: 'buildscripts/jacoco.gradle'
This task can generate a unit and ui test coverage for a specific flavor.
But when I start the gradle task with ./gradlew testDebugUnitTestCoveragethe tests are executing fine but when it comes to collect the UI Test coverage I'm getting this error:
Unable to read execution data file /.../app/build/outputs/code_coverage/debugAndroidTest/connected/*coverage.ec
My project hierarchy looks like this
I'm using Gradle 6.1.1 and Android Gradle Build Tools 4.0.0
