Я настраиваю отчеты о модульных тестах Jacoco (версия 0.8.3) для конкретного модуля c в проекте Gradle (версия 6.0.1). В настоящее время у меня есть базовая c java структура проекта, где у меня есть в данном модуле репозитории sr c и src / main, src / test с файлами основного кода и модульными тестами.
Это моя конфигурация в файле c build.gradle для данного модуля:
apply plugin: 'java'
apply plugin: 'jacoco'
jacoco {
toolVersion = "0.8.3"
}
jacocoTestReport {
reports {
xml.enabled true
html.enabled true
}
}
jacocoTestCoverageVerification {
violationRules {
rule {
limit {
counter = 'LINE'
value = 'COVEREDRATIO'
value = 'COVEREDRATIO'
minimum = 1.0
}
}
}
}
sonarqube {
properties {
property "sonar.coverage.jacoco.xmlReportPaths", "build/customJacocoReportDir/test/jacocoTestReport.xml"
property "sonar.java.binaries", "build/classes/java/main"
property "sonar.java.test.binaries", "build/classes/java/test"
property "sonar.sources", "src/main"
property "sonar.tests", "src/test"
}
}
Однако после запуска jacocoTestReport генерируется файл xml с результатами теста, но он показывает 0 покрытие модульных тестов, даже если у меня есть модульные тесты, охватывающие мои занятия. Классы модульных тестов также включены в сгенерированный индексный файл. html.
Этот проект имеет автономную конфигурацию Gradle для модульных тестов, я думаю, что проблема может быть, я не смог ее найти. Файл junit-test.gradle:
sourceSets.test.output.resourcesDir = file('build/classes/java/test/')
configurations {
testCompile {
exclude group: 'junit'
exclude group: 'org.aspectj'
exclude group: 'org.hamcrest'
exclude module: 'jsonassert'
exclude module: 'jsr305'
}
}
dependencies {
testImplementation(
// Junit 5
'org.junit.jupiter:junit-jupiter-api',
'org.junit.jupiter:junit-jupiter-params',
)
testRuntimeOnly(
'org.junit.jupiter:junit-jupiter-engine',
)
}
tasks.named('compileTestJava').configure {
options.encoding = 'UTF-8'
doFirst {
moduleOptions {
addReads = [(project.moduleName): 'org.junit.jupiter.api']
}
}
}
tasks.named('test').configure { Test test ->
test.useJUnitPlatform {
includeEngines 'junit-jupiter'
// scanForTestClasses false
include "***/**/*Tests.class"
include "****/**/*TestFactory.class"
filter {
failOnNoMatchingTests false
}
}
test.testLogging {
events "passed", "skipped", "failed"
exceptionFormat TestExceptionFormat.FULL
}
test.reports {
html.enabled = true
}
doFirst {
moduleOptions {
addReads = [(project.moduleName): 'org.junit.jupiter.api']
addOpens = ['java.base/java.lang': 'spring.core']
}
def testJvmArgs = [
'-ea',
'-Dfile.encoding=utf-8',
'-Dsun.jnu.encoding=utf-8',
'-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager',
'-Duser.country=**',
'-Duser.language=**',
'-Duser.timezone=***,
]
configurations.agent.files.each {
testJvmArgs.add 1, "-javaagent:$it.path"
}
test.jvmArgs testJvmArgs
}
}