(一)sonar-scanner结合jacoco
这里还是要用到maven生成jacoco的统计结果,所以推荐直接使用maven的方式检查项目
1.在要检测的项目的pom文件中加入如下配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<argLine>${surefireArgLine}</argLine>
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<executions>
<execution>
<!-- 在maven的initialize阶段,将Jacoco的runtime agent作为VM的一个参数 传给被测程序,用于监控JVM中的调用。 -->
<id>default-prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<destFile>
${project.build.directory}/coverage-reports/jacoco.exec
</destFile>
<propertyName>surefireArgLine</propertyName>
</configuration>
</execution>
<!-- 在程序的verify阶段,执行report测试的程序。 文件的输入为perpare-agent阶段中设置或者默认的jacoco.exec.
参数 includes和excludes可用来选定report中过滤的类。 -->
<execution>
<id>default-report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
<configuration>
<dataFile>${project.build.directory}/coverage-reports/jacoco.exec</dataFile>
<outputDirectory>${project.reporting.outputDirectory}/jacoco</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
2. 然后执行:mvn install
jacoco的结果文件就在target目录下生成了
3.然后,在项目下新建sonar-project.properities文件,内容如下:
sonar.projectKey=your_project_name
sonar.projectName=your_project_name
sonar.projectVersion=1.0
sonar.sources=src/main
sonar.tests=src/test
sonar.java.binaries=target
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.core.codeCoveragePlugin=jacoco
指定exec二进制文件存放路径
sonar.jacoco.reportPaths=[your_path]/jacoco.exec
以下属性可选择性加,当然也可以不加
sonar.dynamicAnalysis=reuseReports
sonar.jacoco.reportMissing.force.zero=false
4.最后在项目根目录下执行sonar-scanner,就可以在sonar主页看到包含单元测试覆盖率的报告了
(二)使用maven直接在sonar中加入单元测试覆盖率
这种方法的前两步跟上面是一样的,最后检查代码的命令为:
mvn clean install sonar:sonar -Dmaven.test.failure.ignore=true -Dsonar.core.codeCoveragePlugin=jacoco -Dsonar.jacoco.reportPaths=[your_path]/jacoco.exec -Dsonar.dynamicAnalysis=reuseReports