сломан мультимодуль Kotlin JACOCO - PullRequest
0 голосов
/ 06 октября 2019

Я работаю над некоторым сайд-проектом , чтобы изучить технический стек gradle-spring-kotlin. Во время работы над разделением приложения на отдельные модули я застрял на проблемах покрытия. Сокращенно:

РЕДАКТИРОВАТЬ: проблема 2. решена, но я должен найти причину этого решения. Когда я решу эти проблемы, я напишу ответ, который соберет всю информацию для вас. (Или, может быть, кто-то будет быстрее меня и поможет мне, прежде чем я решу 2;))

  1. Я не могу исключить некоторые классы из отчета в подпроектах
  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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...