情况 我正在开发一个运行良好的 Spring Boot 应用程序,但是构建-测试周期需要很长时间,在普通的开发环境中不实用。
所以,我最近决定将我的单元测试和集成测试分开。集成测试基于 Cucumber,而单元测试是纯 JUnit 5 测试。
为此,我使用了 Gradle 插件org.unbroken-dome.test-sets
,它很好地创建了相关的 sourceSets 等。
testSets {
intTest { dirName = 'int-test' }
}
一切运行良好,我的测试按预期执行。当我进行构建时仍会执行单元测试,而当我调用“gradlew intTest”时会执行集成测试。这是设计使然,因为我不想一直执行所有测试。
运行测试后,我还有一个jacoco/test.exec
文件和一个jacoco/inttest.exec
文件。所有这些都是设计和测试集插件所宣传的。
问题
这是我的问题。当我的所有测试仍在 test-SourceSet 中时,因此在拆分之前并且仅test.exec
生成文件时,JaCoCo 报告的覆盖率约为 75%。但是现在我已经拆分了测试并拥有了test.exec
文件intTest.exec
,JaCoCo 只报告了 15% 的覆盖率,考虑到我的单元测试和集成测试的范围,这几乎是正确的。
问题
我怎样才能让 JaCoCo 同时使用test.exec
和intTest.exec
文件来报告覆盖率并允许覆盖率验证任务再次考虑两者?
相关代码 这里是一些相关代码:jacoco.gradle
apply plugin: 'java'
apply plugin: 'jacoco'
// -----------------------------------------------------------
//
// JaCoCo
dependencies {
implementation "org.jacoco:org.jacoco.agent:${jacocoToolVersion}:runtime"
}
jacoco {
toolVersion = "${jacocoToolVersion}"
}
jacocoTestReport {
dependsOn test
reports {
xml.enabled false
csv.enabled true
html.destination file("${buildDir}/reports/jacoco/Html")
csv.destination file("${buildDir}/reports/jacoco/jacoco.csv")
}
}
jacocoTestCoverageVerification {
violationRules {
rule {
limit {
minimum = minCodeCoverage
}
}
}
}
check.dependsOn jacocoTestCoverageVerification
来自 build.gradle 的片段:
tasks.withType(Test) {
useJUnitPlatform()
testLogging {
events "passed", "skipped", "failed"
}
testLogging.showStandardStreams = true
reports {
junitXml.enabled = true
html.enabled = true
}
}
和
testSets {
intTest { dirName = 'int-test' }
}
intTest.mustRunAfter test
check.dependsOn intTest
test {
systemProperties System.getProperties()
finalizedBy jacocoTestReport
}
提前感谢您帮助我或指出我正确的方向。