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!!!!!!!!!
|