【发布时间】:2019-09-14 06:41:22
【问题描述】:
我有几个使用 Java 8 构建的 Gradle 项目,最近将它们转换为使用 Java 11 后,Jacoco 代码覆盖率报告报告的百分比比以前低得多。在一个项目中,刚过渡后,我的覆盖率从 81% 下降到 16%。
我尝试将 Jacoco 插件更新到 0.8.3(有官方 JDK 11 support),将 Gradle 更新到 5.4,将 TestNG 更新到 6.14.3(不确定这是否有任何影响;认为打开它不会有什么坏处最新版本)。即使经过这些更改,我上面提到的项目也有 16% 的覆盖率。我手动检查了一些报告覆盖率为 0% 的类,发现它们确实有测试覆盖率。
例如,我将此方法添加到我的一个类中:
public String helloWorld(){
return "hello";
}
然后我在测试中使用它:
@Test(groups = IntegrationTest.INTEGRATION_GROUP)
public void testHelloWorld() {
String helloWorld = authManager.helloWorld();
assertEquals(helloWorld, "hello");
}
并且覆盖率报告为 0:
如果有帮助,这里是我的 Jacoco Gradle 设置。我正在使用自定义插件来配置它们。
class ManagedJacocoPlugin implements ManagedPlugin {
@Override
void apply(PluginManager pluginManager) {
pluginManager.apply(JacocoPlugin.class)
}
@Override
void configure(Project project, GradlePluginConfig pluginConfig) {
def jacoco = project.extensions.getByName("jacoco")
jacoco.toolVersion = "0.8.3"
def jacocoTestReport = project.tasks.getByName('jacocoTestReport')
jacocoTestReport.reports {
xml.enabled false
csv.enabled false
}
project.tasks.withType(Test).each { t ->
t.jacoco {
destinationFile = project.file("$project.buildDir/jacoco/test.exec")
}
}
jacocoTestReport.dependsOn "integrationTest"
}
}
据我所知,鉴于我使用的工具版本,Java 11 应该完全支持 Jacoco 覆盖范围。我在这里错过了什么?
【问题讨论】:
-
请阅读stackoverflow.com/help/mcve 并提供完整 可验证测试示例以及覆盖率报告为0的相应类。
-
谢谢@Godin,会的
标签: java code-coverage jacoco java-11