用了整整三天.QAQ.靠体力一下下试出来的结果.踩了个坑.
一开始,项目的覆盖率显示的是0,单元测试数也没有显示.
首先,想到的是test中的项目包结构目录的问题.
倒不是一定是全的,需要的包的路径结构要完整.
于是调整了test中的包结构,把测试class的命名改为了(原java)Test
项目用的是testng.不知道为啥,junit的我没运行出来单元测试数.
在工程目录,右击选择run with coverage.testng的.(可以为这个容器edit configurations->configuration的package选择要测的那个单元测试包->apply and ok).
修改了错误,使单元测试均可运行.
在右侧有coverage栏,可以看到覆盖率.eg.30%.
这是一个完整项目的pom.xml文件.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test.testcoverage</groupId>
<artifactId>testcoverage</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.9</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
demo见:(另附链接)https://download.csdn.net/download/level_Tiller/13072686
生成target中的jacoco统计报告,ignore=true,可以看到单元测试中不通的error
mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install -Dmaven.test.failure.ignore=true
若是这步没问题,或者没别的啥问题,那么在target->site->jacoco中可以看到index.html.在浏览器上打开.可以看到
举个栗子,
有红的,有绿的.
按道理推到sonar就可以看到结果了.mvn sonar:sonar -Dsonar.host.url=888888888888 -Dsonar.login=8888888888888
结果,应该是sonarqube中覆盖率为0,单元测试数为423423(举个栗子)
显然没解决.但是好了这么一点.
然后又做了颇多的努力.重点应该就是target下要能看到jacoco.exec
其中一个,不知道是不是靠这个解决的.就是修改的pom文件中的那个plugin.加了个输出位置.includes里面是让jacoco扫描的包路径,这个可以不加,因人而异,自己来吧.
<configuration >
<destFile>${project.build.directory}/jacoco.exec</destFile>
<dataFile>${project.build.directory}/jacoco.exec</dataFile>
<includes>
<include>**/service/impl/**</include>
</includes>
</configuration>
还有一点忘记说了,target下要有jacoco.exec,如果你的在coverage-reports下,自己弄弄pom,或者将jacoco.exec复制到target下.或者名字不对的话,如jacoco-sshjdhksjhf.exec,把名字啥的重命名一下 .
然后重新mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install.............
应该就能解决了.
附一张成果图: