(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