代码测试覆盖率--JCoverage的使用

类别:Java 点击:0 评论:0 推荐:
作者: 胡之新 个人简介: 2002年毕业与西安某高校计算数学专业, 一直在学习JAVA并用JAVA混饭吃,当然也关心一点OpenSource的东西 个人信条: 凡人Olics,一样的烦恼一样的执著! 个人Blog: olics.blogone.net 交流EMail: [email protected],由于都知道的原因,本人不收垃圾和广告,谢谢合作 MSN: [email protected]  

XP编程这么多时间以来深受大家的喜爱,代码测试覆盖率作为XP不可缺少的一个部分深受管理者的喜爱,在目前市场上有很多的这方面的工具,最经典的为cover,但其不是免费的(对商业不是免费,对open source是免费的),今天我将推荐JCoverage,这是一个很不错的工具,虽然不是OpenSource的,但对于个人其有free版的.

主页:http://www.jcoverage.com/

 

JCoverage的允许需要JUnit和Log4j,等类库,你可以在其文档中看到详细说明,同时JCoverage可以和Ant结合在一起使用,

注意事项:

1 : 初始化是最好删除当前目录下的jcoverage.ser文件,这个文件就是测试的结果,如果其在当前目录下找到这个文件将不会进行测试,或者重新测试

2 : 在进行instrument时,一定要保证其class是debug模式下编译的,否则将不能注入jcoverage指令,建议从新用debug模式编译一个在当前目录

3 : 在进行junit是,一定要保证测试的是加入jcoverage指令的类,否则不能生成jcoverage.ser文件,当然也就不能够测试覆盖率了,我在这个弄了很久,主要是classpath的问题,这个时候你要保证其的classpath中包含加入jcoverage指令的class并不简单,如果你使用工程级别的classpath,那你就痛苦吧,我就是这样痛苦的很,你最好使用一个新的classpath,即除了工程必须的就是加入jcoverage指令的class了,这也就是我下面的例子为什么那么烦琐的原因;这个看似简单的问题会把你的信心给扫的全无.因为如果你经常使用ant的话,那么在你的classpath中有很多个一样的class,如工程自己一个,为了加入jcoverage指令而以debug模式编译的一份,加入jcoverage指令的一份,那么现在至少有三份了,罗嗦了这么多就是不希望大家走弯路.

4 : 最后生成报告,你可以选择html和xml格式,但free版只有html格式,这里有一个不是很完美的地方,如果你的资源代码是UTF-8编码的,那么生成的报告中代码注释将有一部分乱码,

 

附录中有两部分内容:

附录1:是我个人的ant脚本 ,这段脚步是我个人的环境,你如果需要使用请修改之 ,
附录2:JCoverage的报告截图 ,次报告为Html的格式,当然你也可以设置为其它格式

 

附录:我个人工程中的ant脚本:

<!--jcoverager report-->
<property name="build.jcoverageReport.dir" value="${build.dir}/JCoverageReport" />
<taskdef resource="tasks.properties" classpathref="appclasspath" />
<!--拷贝资源文件,这里主要是为了下面生成报告方便-->
<target name="jcoverage_init" depends="init">
<mkdir dir="${build.jcoverageReport.dir}/temp_source" />
<copy todir="${build.jcoverageReport.dir}/temp_source">
<fileset dir="${project.src.dir}" />
</copy>
<copy todir="${build.jcoverageReport.dir}/temp_source">
<fileset dir="${project.test_src.dir}" />
</copy>
</target>
<!--编译资源代码,由于instrument要求class必须为debug模式编译的,为了安全这里从新编译-->
<target name="jcoverage_compile" depends="jcoverage_init">
<mkdir dir="${build.jcoverageReport.dir}/temp_classes" />
<javac srcdir="${build.jcoverageReport.dir}/temp_source"
destdir="${build.jcoverageReport.dir}/temp_classes"
debug="yes">
<include name="**/*.java" />
<classpath refid="classpath" />
</javac>
</target>
<!--instrument在类的二进制文件中注入jcoverage指令;注意:一定是debug模式下编译的类-->
<target name="jcoverage_instrument" depends="jcoverage_compile">
<mkdir dir="${build.jcoverageReport.dir}/temp_instrument" />
<instrument todir="${build.jcoverageReport.dir}/temp_instrument">
<!-- 忽略org.apache.common的应用 -->
<ignore regex="org.*" />
<fileset dir="${build.jcoverageReport.dir}/temp_classes">
<include name="**/*.class" />
</fileset>
<classpath refid="classpath" />
</instrument>
</target>
<!-- 启动junit,进行代码覆盖测试 -->
<target name="jcoverage_junit" depends="jcoverage_instrument">
<mkdir dir="${build.jcoverageReport.dir}/temp_junit" />
<junit printsummary="no" haltonfailure="no" fork="yes">
<formatter type="brief" usefile="false" />
<formatter type="xml" usefile="yes" />
<batchtest todir="${build.jcoverageReport.dir}/temp_junit">
<fileset dir="${build.jcoverageReport.dir}/temp_instrument" includes="**/*Test.class" />
</batchtest>
<classpath>
<pathelement location="${build.jcoverageReport.dir}/temp_instrument" />
<path refid="classpath" />
</classpath>
</junit>
</target>
<!-- 产生代码覆盖测试报告 -->
<target name="jcoverage_report" depends="jcoverage_junit">
<report srcdir="${build.jcoverageReport.dir}/temp_source" destdir="${build.jcoverageReport.dir}"/>
</target>
<target name="jcoverage" depends="jcoverage_compile,jcoverage_instrument,jcoverage_report" />

附录2:JCoverage 报告截图

包的报告是这样的,当点击一个类时,则显示类中具体的代码允许情况

具体类中的允许情况,其中黄色为没有被允许的代码,(这个截图中正规方法都没有被允许)


Good Luck!!!!!!!!!

本文地址:http://com.8s8s.com/it/it16358.htm