Я работаю над некоторым сайд-проектом , чтобы изучить технический стек gradle-spring-kotlin. Во время работы над разделением приложения на отдельные модули я застрял на проблемах покрытия. Сокращенно:
РЕДАКТИРОВАТЬ: проблема 2.
решена, но я должен найти причину этого решения. Когда я решу эти проблемы, я напишу ответ, который соберет всю информацию для вас. (Или, может быть, кто-то будет быстрее меня и поможет мне, прежде чем я решу 2
;))
- Я не могу исключить некоторые классы из отчета в подпроектах
- В отчете нет ссылки на источники: похоже, он пытается получить исходный путь на уровне подпроекта, но я создаю объединенный отчет сверху.
Итак, вот мой основной build.gradle
файл:
apply plugin: 'java'
apply plugin: 'jacoco'
allprojects {
apply plugin: 'java'
apply plugin: 'jacoco'
repositories {
maven { url "https://repo.spring.io/plugins-release" }
gradlePluginPortal()
mavenCentral()
jcenter()
}
dependencies {
compile "org.jacoco:org.jacoco.ant:$jacocoVersion"
}
jacoco { toolVersion = jacocoVersion }
jacocoTestReport {
group = 'Coverage reports'
description = 'Generates a test coverage report for a project'
additionalSourceDirs.from files(sourceSets.main.allSource.srcDirs)
sourceDirectories.from files(sourceSets.main.allSource.srcDirs)
classDirectories.from files(sourceSets.main.output)
reports {
xml.enabled = true
html.enabled = true
}
}
}
def publishedProjects = subprojects.findAll { it.path != ':simulator' }
task jacocoMerge(type: JacocoMerge) {
publishedProjects.each { executionData it.tasks.withType(Test) }
doFirst { executionData = files(executionData.findAll { it.exists() }) }
}
task jacocoRootReport(type: JacocoReport, group: 'Coverage reports') {
description = 'Generates an aggregate report from all subprojects'
dependsOn publishedProjects.test, jacocoMerge
additionalSourceDirs.from = files(publishedProjects.sourceSets.main.allSource.srcDirs)
sourceDirectories.from = files(publishedProjects.sourceSets.main.allSource.srcDirs)
classDirectories.from = files(publishedProjects.sourceSets.main.output)
executionData jacocoMerge.destinationFile
onlyIf = {
true
}
doFirst {
executionData.from files(executionData.findAll { it.exists() })
}
reports {
html.enabled = true // human readable
xml.enabled = true // required by coveralls
xml.destination = file("${buildDir}/reports/jacoco")
html.destination = file("${buildDir}/reports/jacoco/html")
sourceSets sourceSets.main
}
afterEvaluate {
classDirectories.from files(classDirectories.files.collect {
fileTree(
dir: it,
excludes: [
"*io/saas/starter/Application*",
"*io/saas/starter/configuration/*",
"*io/saas/starter/*Test*/*"
]
)
})
}
}
jacocoTestCoverageVerification {
violationRules {
rule {
element = 'CLASS'
limit {
counter = 'LINE'
value = 'COVEREDRATIO'
minimum = 1.0
}
excludes = [
'io.saas.starter.configuration.*',
'*Test*',
'io.saas.starter.Application'
]
}
}
}
jacocoRootReport.dependsOn jacocoTestCoverageVerification
И, как я писал ранее: классы / файлы, такие как io/saas/starter/Application.kt
, все еще видны в отчете, также учитывается их результат.
Во-вторых, исходные файлы из отчета не отображаются. Похоже, что во время генерации отчетов jacoco пытался искать источники в io/saas/starter/Application.kt
вместо core/io/saas/starter/Application.kt
. Вы можете проверить все на github, если хотите получить более подробную информацию: https://github.com/sdudziak/saas_starter/tree/enhacement/1-move-heavy-tests-to-separate-subproject