单元测试失败时SonarQube不识别Jacoco报告该如何配置?
根因说明
默认Gradle的testDebugUnitTest任务在存在失败测试用例时会被标记为执行失败,Gradle默认会终止后续所有任务的执行,导致Jacoco覆盖率报告生成任务、SonarQube分析任务都不会运行,自然SonarQube无法读取到最新的覆盖率数据。
解决方案
你可以选择以下任意一种方式配置,核心是保证测试失败时后续的报告生成、SonarQube分析任务能正常执行:
方案1:修改Gradle配置全局适配(推荐)
- 调整测试任务配置,允许测试用例失败时不标记任务为失败,保证后续任务正常执行:
修改jacoco.gradle中的Test任务配置块,新增ignoreFailures = true配置:
tasks.withType(Test) { jacoco.includeNoLocationClasses = true jacoco.excludes = ['jdk.internal.*'] ignoreFailures = true // 新增该行配置 }
- 显式声明SonarQube任务依赖Jacoco报告生成任务,保证报告生成完成后再执行SonarQube分析,在
sonarQube.gradle末尾添加如下配置:
tasks['sonarqube'].dependsOn jacocoTestReport
配置完成后正常执行gradlew clean testDebugUnitTest sonarqube命令即可,即使测试用例失败也会正常生成覆盖率报告并上传到SonarQube。
方案2:执行命令时添加参数(无需修改配置)
如果不想修改项目配置,可以在执行命令时添加--continue参数,告知Gradle即使前面的任务执行失败,也继续运行后续任务:
gradlew clean testDebugUnitTest sonarqube --continue
该方式不需要修改项目代码,适合临时使用的场景。
内容的提问来源于stack exchange,提问作者ykasur
相关产品推荐
相关产品推荐

