之前的项目采用Clover来进行测试覆盖率的测算,用着还不错,挺好用的。但是由于Clover是非开源的,要给钱,免费的licence过期了,只能换一个开源的了。这次选用了cobertura,一个Jcoverage的分支,也有maven的插件。
在maven主pom进行配置:
<build> <plugins> …… <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <version>2.4-SNAPSHOT</version> <configuration> <formats> <format>html</format> <format>xml</format> </formats> <instrumentation> <!--<ignore>.*</ignore> --> <excludes> <exclude>**/*Test.class</exclude> <exclude>**/Abstract*TestCase.class</exclude> <exclude>**/*Constants.class</exclude> <exclude>**/*interface/*.class</exclude> <exclude>**/*domain/*.class</exclude> <exclude>**/*dataobject/*.class</exclude> <exclude>**/web/**/*.class</exclude> </excludes> </instrumentation> </configuration> </plugin> ...... </plugins> </build> |
执行mvn cobertura:cobertura命令即可得出测试覆盖率报表,其中主要包括Line coverage,branch coverage。得出的报表是以子项目为单位的。由于cobertura在maven插件中并未提供merge的功能,所有只依靠cobertura-maven-plugin无法得出整个项目的测试覆盖率。
但是可以依靠其他手段获得整个项目的。具体实施方法如下:
1. 下载coberturahttp://cobertura.sourceforge.net/download.html.(如果不想自己打包,可以直接下载bin文件而不用src.如果对其源码敢兴趣可以下载src,cobertura是基于ant构建的)
2. 执行 mvn cobertura:cobertura 命令。执行完成后在各个子项目的target/cobertura里面会生成cobertura.ser文件。但是主pom对应的target/cobertura目录下并没有cobertura.ser
3.将子项目的cobertura.ser进行merge,生成整个项目的cobertura.ser文件。
../cobertura-1.9.3/cobertura-merge.sh --datafile ./target/cobertura/cobertura.ser ./profile-ao/target/cobertura/cobertura.ser ./profile-core/target/cobertura/cobertura.ser ./profile-dal/target/cobertura/cobertura.ser ./profile-client/target/cobertura/cobertura.ser ./profile-common/target/cobertura/cobertura.ser
执行完上面命令后,在主pom对应的target/cobertura目录下会生成一个整个项目的cobertura.ser文件
4. 再执行mvn cobertura:cobertura命令。执行完成后,整个项目的测试覆盖率就生成了。