返回

SonarQube中的Maven项目测试覆盖率:统一的视图

见解分享

在快速发展的软件开发世界中,测试覆盖率已成为衡量代码质量和可靠性的关键指标。SonarQube是一个流行的开源平台,可提供代码质量分析和度量,包括测试覆盖率。

随着SonarQube从6.2版本开始,测试报告不再按类别分开。相反,SonarQube将所有测试报告合并为一份涵盖所有内容的统一报告。这引发了一个问题:如何在Maven项目中分别运行单元测试(由Maven Surefire插件运行)和集成测试(由Maven Failsafe插件运行)时获得测试覆盖率?

本文将探讨SonarQube 8.3中Maven项目的测试覆盖率报告的细微差别,并指导您获取单元测试和集成测试的单独覆盖率指标。

理解SonarQube的测试覆盖率报告

在SonarQube 6.2之前的版本中,测试报告按以下类别分开:

  • 单元测试
  • 集成测试
  • 其他测试

然而,从6.2版开始,SonarQube采用了更全面的方法,将所有测试报告合并为一份整体报告。这一变化消除了类别划分,但给用户带来了新的挑战,即无法再轻松区分不同类型的测试的覆盖率。

在Maven项目中获取单元测试和集成测试的单独覆盖率

要解决此问题,您需要在Maven构建过程中使用额外的配置,如下所示:

pom.xml

<project>
  ...
  <properties>
    <maven.surefire.reportFormat>xml</maven.surefire.reportFormat>
    <maven.failsafe.reportFormat>xml</maven.failsafe.reportFormat>
  </properties>
  ...
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-report-plugin</artifactId>
        <version>3.0.0-M5</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-report-plugin</artifactId>
        <version>3.0.0-M5</version>
      </plugin>
    </plugins>
  </reporting>
  ...
</project>

此配置将生成Surefire和Failsafe测试运行的XML报告。接下来,您需要在SonarQube项目配置中添加以下属性:

SonarQube项目属性

  • sonar.coverage.jacoco.xmlReportPaths :此处指定Surefire XML报告的路径(例如,target/surefire-reports/*.xml)。
  • sonar.coverage.jacoco.itReportPaths :此处指定Failsafe XML报告的路径(例如,target/failsafe-reports/*.xml)。

添加这些属性后,SonarQube将分别分析Surefire和Failsafe报告,并为您提供单元测试和集成测试的单独覆盖率指标。

结论

理解SonarQube中Maven项目的测试覆盖率报告的细微差别对于确保准确可靠的代码质量度量至关重要。通过使用本文概述的附加配置,您可以轻松获取单元测试和集成测试的单独覆盖率指标,从而获得对代码库测试有效性的更深入了解。

通过持续监控和提高测试覆盖率,您可以提高代码质量,减少缺陷,并最终为您的用户提供更可靠、更稳定的软件产品。