JaCoCo Gradle Kotlin DSL исключает файл из правил нарушения - PullRequest
1 голос
/ 29 мая 2020

Я пытаюсь настроить свой проект на запуск JaCoCo и сбой сборки, если он имеет менее 80% тестового покрытия. Предостережение в том, что я хочу исключить конкретный файл, и мне кажется, что это не работает. Я поискал в Интернете и прочитал кучу ответов на Stack Overflow, сообщения в блогах и документацию по плагину, но я не могу заставить ничего работать. Он всегда по-прежнему включает файл, который я пытаюсь исключить.

Я начал с:

tasks.jacocoTestCoverageVerification {
    violationRules {
        rule {
            limit {
                minimum = "0.8".toBigDecimal()
            }
        }
    }
}

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

tasks.jacocoTestCoverageVerification {
    violationRules {
        rule {
            classDirectories.setFrom(sourceSets.main.get().output.asFileTree.matching {
                exclude("path.to.my.class.HelloWorld")
            })
            limit {
                minimum = "0.8".toBigDecimal()
            }
        }
    }
}
tasks.jacocoTestCoverageVerification {
    classDirectories.setFrom(
            sourceSets.main.get().output.asFileTree.matching {
                exclude("path.to.my.class.HelloWorld")
            }
    )
    violationRules {
        rule {
            limit {
                minimum = "0.8".toBigDecimal()
            }
        }
    }
}
tasks.jacocoTestCoverageVerification {
    violationRules {
        rule {
            limit {
                minimum = "0.8".toBigDecimal()
            }
        }
    }
}
tasks {
    getByName<JacocoReport>("jacocoTestReport") {
        afterEvaluate {
            classDirectories.setFrom(files(classDirectories.files.map {
                fileTree(it) {
                    exclude("path.to.my.class.HelloWorld")
                }
            }))
        }
    }
}
tasks.jacocoTestCoverageVerification {
    violationRules {
        rule {
            limit {
                minimum = "0.8".toBigDecimal()
            }
        }
    }
}
tasks.withType<JacocoReport> {
    classDirectories.setFrom(
        sourceSets.main.get().output.asFileTree.matching {
            exclude("path.to.my.class.HelloWorld")
        }
    )
}

Результат всех них точно такой же:

Execution failed for task ':jacocoTestCoverageVerification'.
> Rule violated for bundle OneUIBackend: instructions covered ratio is 0.6, but expected minimum is 0.8

Кто-нибудь знает, как это сделать правильно?

1 Ответ

0 голосов
/ 29 мая 2020

Получается, что я объявлял исключенный файл как путь к классам, а не как путь к файлу. Окончательное решение:

tasks.jacocoTestReport {
    dependsOn(tasks.test)
    finalizedBy(tasks.jacocoTestCoverageVerification)
    classDirectories.setFrom(
            sourceSets.main.get().output.asFileTree.matching {
                exclude("path/to/my/file/HelloWorld*")
            }
    )
}
tasks.jacocoTestCoverageVerification {
    violationRules {
        rule {
            classDirectories.setFrom(sourceSets.main.get().output.asFileTree.matching {
                exclude("path/to/my/file/HelloWorld*")
            })
            limit {
                minimum = "0.8".toBigDecimal()
            }
        }
    }
}
...