自定义Test类型任务时jacocoTestReport始终被SKIPPED问题求助
问题诱因
- jacocoTestReport任务默认仅关联Gradle内置
test任务的执行数据(.exec格式文件),你自定义了Test类型任务myTest后,单独配置了该任务的jacoco输出路径为build/jacoco/myTest.exec,但未主动告知jacocoTestReport读取该路径的执行数据。 - jacocoTestReport内置跳过逻辑:当未找到匹配的测试执行数据文件时,会自动标记为SKIPPED,这就是使用默认test任务正常、自定义任务就跳过的核心原因。
- 额外注意:你在myTest配置中同时声明了
useTestNG()和useJUnitPlatform(),两个测试框架声明会冲突,实际运行时只会生效最后一个,建议删除你未使用的测试框架配置。
修复方案
在jacocoTestReport配置块中新增executionData配置,指定读取自定义myTest任务的执行数据即可,修改后完整配置如下:
plugins { id 'java' id 'jacoco' } repositories { mavenCentral() } task myTest(type: Test) { // 二选一即可,删除不需要的测试框架配置 useJUnitPlatform() // useTestNG() finalizedBy jacocoTestReport reports { junitXml.required = false html.required = true } jacoco { enabled = true destinationFile = layout.buildDirectory.file("jacoco/${name}.exec").get().asFile } } jacocoTestReport { dependsOn myTest // 新增该行,指定读取myTest的执行数据 executionData myTest reports { xml.required = false csv.required = false html.outputLocation = layout.buildDirectory.dir('jacocoHtml') } }
配置修改完成后,执行./gradlew myTest或./gradlew jacocoTestReport都可以正常生成覆盖率报告。
内容的提问来源于stack exchange,提问作者Krivers
相关产品推荐
相关产品推荐

