Мы настроили исключает:
def coverageExcludes() {
return [
"com/ourcompany/*Config*",
"com/ourcompany/ServiceApplication*",
"com/ourcompany/Shutdown*",
"com/ourcompany/ShutdownConnector*",
"com/ourcompany/Tomcat*",
"com/ourcompany/TomcatCustomConnectorCustomizer*",
"com/ourcompany/endpoint/exception/**",
"com/ourcompany/endpoint/util/ObjectMapperBuilder*",
"com/ourcompany/framework/**",
"com/ourcompany/helper/ApiHelper*",
"com/ourcompany/helper/OffsetDateTimeDeserializer*",
"com/ourcompany/persistence/entity/**",
"com/ourcompany/persistence/exception/**",
"com/ourcompany/service/exception/ServiceException*",
"com/ourcompany/service/model/**",
"com/ourcompany/v2/**",
"com/ourcompany/v3/**"
]
}
использовал их в jacocoTestReport
:
jacocoTestReport {
reports {
xml {
enabled true
}
html {
enabled true
}
}
getExecutionData().setFrom(fileTree(buildDir).include("/jacoco/*.exec"));
afterEvaluate {
classDirectories.setFrom(files(classDirectories.files.collect {
fileTree(dir: it,
exclude: coverageExcludes()
)
}))
for (Object c : classDirectories) {
System.out.println(c);
}
}
}
и исключает работу:
Затем мы попытались использовать те же исключения в задаче проверки с пороговым значением ошибки покрытия, равным 0,87, поскольку именно это отображается в отчете о покрытии:
jacocoTestCoverageVerification {
afterEvaluate {
classDirectories.setFrom(files(classDirectories.files.collect {
fileTree(dir: it,
exclude: coverageExcludes()
)
}))
for (Object c : classDirectories) {
System.out.println(c);
}
}
violationRules {
rule {
element = 'BUNDLE'
limit {
counter = 'INSTRUCTION'
value = 'COVEREDRATIO'
minimum = 0.87
}
}
}
}
check.dependsOn jacocoTestCoverageVerification
Но это не работает:
Не удалось выполнить задачу ': settings: jacocoTestCoverageVerification'.
Правило нарушено для настроек пакета: коэффициент покрытия инструкций равен 0,70, но ожидаемый минимум равен 0,87
Мы сравнили вывод classDirectories
в обеих задачах, и они точно совпадают, и в списке исключений ничего нет в classDirectories
. Это означает, что обе задачи видят одни и те же классы.
И все же задача проверки получает другой ответ по покрытию, чем задача отчета.
Это вызывает беспокойство, поскольку мы не знаем, какая задача получает правильный ответ. Если это задача отчета, мы можем просто жить с более низким порогом в задаче проверки, но если у нас действительно охват только 70%, мы хотели бы знать это.
Насколько мы можем судить Исходя из документации, мы настроили задачу проверки для анализа покрытия точно так же, как и для задачи отчета.
Что мы делаем не так?
(Мы используем Gradle 5.5 .1, и пока не может обновить, но будет, если мы сможем обойти эту проблему.)