У меня есть проект Android с использованием kotlin в студии Android, и я хотел использовать Jacoco, чтобы сообщить о тестовом покрытии кода. Я использую Dagger, и мне бы хотелось исключить эти классы из отчета. Но использование excludes
ничего не делает, и я получаю ошибки, когда пытаюсь запустить задачу Jacoco относительно файлов, которые должны были быть исключены. Ниже мой jacoco.gradle
файл.
apply plugin: 'jacoco'
jacoco {
toolVersion = "$versions.jacoco_version"
}
project.afterEvaluate {
// Grab all build types and product flavors
def buildTypes = android.buildTypes.collect { type -> type.name }
def productFlavors = android.productFlavors.collect { flavor -> flavor.name }
// When no product flavors defined, use empty
if (!productFlavors) productFlavors.add('')
productFlavors.each { productFlavorName ->
buildTypes.each { buildTypeName ->
def sourceName, sourcePath
if (!productFlavorName) {
sourceName = sourcePath = "${buildTypeName}"
} else {
sourceName = "${productFlavorName}${buildTypeName.capitalize()}"
sourcePath = "${productFlavorName}/${buildTypeName}"
}
def testTaskName = "test${sourceName.capitalize()}UnitTest"
// Create coverage task of form 'testFlavorTypeCoverage' depending on 'testFlavorTypeUnitTest'
task "${testTaskName}Coverage" (type:JacocoReport, dependsOn: "$testTaskName") {
group = "Reporting"
description = "Generate Jacoco coverage reports on the ${sourceName.capitalize()} build."
classDirectories = fileTree(
dir: "${project.buildDir}/tmp/kotlin-classes/${sourcePath}",
excludes: ['**/R.class',
'**/R$*.class',
'**/*$ViewInjector*.*',
'**/*$ViewBinder*.*',
'**/BuildConfig.*',
'**/Manifest*.*',
'**/*_MembersInjector.*',
'**/Dagger*Component.*',
'**/Dagger*Subcomponent.*',
'**/*Subcomponent$Builder.*',
'**/*Module_*Factory.*']
)
def coverageSourceDirs = [
"src/main/java",
"src/$productFlavorName/java",
"src/$buildTypeName/java"
]
additionalSourceDirs = files(coverageSourceDirs)
sourceDirectories = files(coverageSourceDirs)
executionData = files("${project.buildDir}/jacoco/${testTaskName}.exec")
reports {
xml.enabled = true
html.enabled = true
}
}
}
}
Вот пример ошибки:
/***/***/StudioProjects/***/app/build/generated/source/kapt/debug/com/***/***/App_MembersInjector.java:9: error: cannot find symbol
@Generated(
^
symbol: class Generated
Этот файл должен быть исключен, но это не так.
ОБНОВЛЕНИЕ:
При дальнейшем исследовании кажется, что ошибка также возникает, когда я пытаюсь просто запустить тестирование с терминала без участия jacoco, поэтому это может быть что-то более глубокое, чем это.