(005)sonar扫描文件,并整合jacoco,指定运行测试类,显示junit测试覆盖率

  这里用到了3个插件,sonar-maven-plugin、jacoco-maven-plugin、maven-surefire-plugin,简单介绍一下功能:

  sonar-maven-plugin:代码扫描、分析出不规代码,配合jacoco-maven-plugin可以显示出junit单元测试覆盖率。

  jacoco-maven-plugin:统计junit单元测试覆盖率。

  maven-surefire-plugin:可以配置运行哪些junit单元测试类。

  这3个插件可以各自独立运行,实现自己的功能。现在配置一个项目的pom.xml文件,记录一下:

<profiles>
  <profile>
    <id>sonar</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
      <sonar.host.url>
        http://localhost:9000
      </sonar.host.url>
      <!--
      <sonar.inclusions> 
        src/main/java/com/sl/service/**,
        src/main/java/com/xx/service/impl/**, 
        src/main/java/com/sl/controller/TestController.java, 
        src/main/java/com/sl/controller/ArticleController.java 
      </sonar.inclusions> 
      <sonar.exclusions> 
        src/main/java/com/xx/service/impl/TestServiceImpl3.java 
      </sonar.exclusions> 
      -->
    </properties>
    <build>
      <plugins>

        <plugin>
          <groupId>org.sonarsource.scanner.maven</groupId>
          <artifactId>sonar-maven-plugin</artifactId>
          <version>3.2</version>
        </plugin>

        <plugin>
          <groupId>org.jacoco</groupId>
          <artifactId>jacoco-maven-plugin</artifactId>
          <version>0.8.1</version>
          <executions>
            <execution>
              <id>prepare-agent</id>
              <goals>
                <goal>prepare-agent</goal>
              </goals>
            </execution>
            <execution>
              <id>report</id>
              <phase>prepare-package</phase>
              <goals>
                <goal>report</goal>
              </goals>
            </execution>
            <execution>
              <id>post-unit-test</id>
              <phase>test</phase>
              <goals>
                <goal>report</goal>
              </goals>
              <configuration>
                <dataFile>target/jacoco.exec</dataFile>
              </configuration>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.19</version>
            <dependencies>
              <dependency>
                <groupId>org.apache.maven.surefire</groupId>
                <artifactId>surefire-junit47</artifactId>
                <version>2.19</version>
              </dependency>
            </dependencies>
          <configuration>
            <!--配置是否跳过测试用例执行-->
            <skipTests>false</skipTests>
            <includes>
              <include>**/ArticleServiceImplTest.java</include>
            </includes>
            <excludes>
              <exclude>**/ArticleControllerTest.java</exclude>
            </excludes>
            </configuration>
        </plugin>

      </plugins>
    </build>
  </profile>
</profiles>

  说明:

  1、如果不配置jacoco,则sonar的控制台显示的覆盖率是0。

  2、sonar中配置的sonar.inclusions、sonar.exclusions是指定扫描的代码:

    不影响单元测试和jacoco覆盖率(项目/target/site/jacoco/index.html里面依然显示全部的)。

    影响sonar控制台的单元测试覆盖率 ,实际上是它指定扫描代码的单元测试覆盖率 ,没扫描到的不会统计。

  3、surefire中skipTests为true时跳过单元测试。它里面的includes、excludes指定执行哪些单元测试,肯定影响sonar和jacoco的覆盖率。

  4、说明一下命令

  sonar首次安装插件,进入到项目跟目录执行:mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar

  运行sonar,不执行单元测试:mvn -U compile sonar:sonar -Denv=sonar -fail-never

  运行sonar,   执行单元测试:mvn -U test sonar:sonar -Denv=sonar -fail-never

  运行sonar,   执行单元测试:mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar,同首次安装一样。

  只运行junit单元测试或者同时统计jacoco覆盖率:mvn test

  

原文地址:https://www.cnblogs.com/javasl/p/12844164.html