已编写单元测试但SonarQube显示覆盖率为0%,求检查build.gradle配置
配置问题排查及修正方案
你提供的build.gradle存在多处配置错误,是导致SonarQube覆盖率显示为0的核心原因,具体问题及修正方案如下:
现有配置的问题列表
- 拼写错误:sonarqube配置块中的
sonarjava.source缺少小数点,正确属性名为sonar.java.source - 报告路径属性不匹配:你使用的3.2.0版本sonarqube插件已废弃
sonar.jacoco.reportPaths属性,需替换为sonar.coverage.jacoco.xmlReportPaths - 空属性无效配置:
sonar.java.test.binaries未配置对应值,会导致SonarQube无法正常读取测试编译产物 - Java版本不匹配:全局
sourceCompatibility指定为15,但sonar.java.source配置为1.8,版本不一致会导致覆盖率解析失败 - 缺少Jacoco报告生成规则:仅引入jacoco插件未配置xml报告生成逻辑,默认Jacoco仅生成二进制exec文件,SonarQube无法直接读取该格式文件
- 依赖配置不规范:
testCompile已在新版Gradle中废弃,建议替换为testImplementation;同时你已开启JUnit Platform(JUnit5),但同时依赖了JUnit4,需确认测试用例的JUnit版本是否匹配
修正后的配置参考
plugins { id 'org.springframework.boot' version '2.4.2' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id "org.sonarqube" version "3.2.0" id 'jacoco' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '15' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.apache.httpcomponents:httpcore:4.4.1' implementation 'org.apache.httpcomponents:httpclient:4.5' implementation('io.jsonwebtoken:jjwt:0.2') implementation 'org.springframework.boot:spring-boot-starter-mail' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' // 若确实使用JUnit4保留,否则建议删除 testImplementation 'junit:junit:4.12' implementation 'org.modelmapper:modelmapper:2.4.1' compileOnly 'org.projectlombok:lombok' runtimeOnly 'mysql:mysql-connector-java' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'org.eclipse.jgit:org.eclipse.jgit:5.4.2.201908231537-r' testImplementation group: 'org.mockito', name: 'mockito-junit-jupiter', version: '2.19.0' testImplementation group: 'org.mockito', name: 'mockito-core', version: '2.19.0' testImplementation group: 'org.springframework.security', name: 'spring-security-test', version: '5.1.6.RELEASE' } // 新增jacoco报告生成配置 jacocoTestReport { reports { xml.enabled true csv.enabled false html.enabled true } dependsOn test // 确保测试跑完再生成报告 } sonarqube{ properties{ property 'sonar.java.source', '15' // 与全局sourceCompatibility保持一致 property 'sonar.java.coveragePlugin', 'jacoco' property 'sonar.coverage.jacoco.xmlReportPaths', 'build/reports/jacoco/test/jacocoTestReport.xml' property 'sonar.java.test.binaries', 'build/classes/java/test' // 补充测试产物路径 property 'sonar.java.binaries', 'build/classes/java/main' // 补充主代码产物路径 } } test { useJUnitPlatform() finalizedBy jacocoTestReport // 执行测试后自动生成覆盖率报告 }
执行命令说明
配置修正后直接执行以下命令即可,任务会自动按顺序完成测试、生成覆盖率报告、上传数据到SonarQube:./gradlew sonarqube
内容的提问来源于stack exchange,提问作者LardinoisJosse
相关产品推荐
相关产品推荐

