1.4 clover测试覆盖率计算
clover覆盖率计算工具通过在被测源代码中插入相关指令,在被测源代码被执行时这些指令被执行,用以统计被测源代码被执行的次数,clover利用一个数据库来保存这些数据。Clover还提供了访问这个数据库的工具,并产生html报告文档。
配置ant运行clover分析
clover实现了一些ant任务,下面是ant中定义这些任务的代码
<taskdef resource="clovertasks" >
<classpath>
<pathelement location="${clover.jar}"/>
</classpath>
</taskdef>
下面的代码初始化clover数据库:
<target name="with.clover" depends="init">
<!-- 删除${build.dir}使得重新编译源代码 -->
<delete dir="${build.dir}" />
<mkdir dir="${build.dir}" />
<clover-setup initString="${user.home}/${ANTLOG_FILE_NOEXT}.db" />
</target>
<!-- 删除${build.dir}使得重新编译源代码 -->
<delete dir="${build.dir}" />
<mkdir dir="${build.dir}" />
<clover-setup initString="${user.home}/${ANTLOG_FILE_NOEXT}.db" />
</target>
下面的代码产生clover分析,格式为html,结果放在tempcloverreport目录中:
<target name="clover.html" >
<delete dir="tempcloverreport"></delete>
<mkdir dir="tempcloverreport" />
<property name="clover.html" value="ok"<>/property>
<clover-report>
<current outfile="tempcloverreport">
<format type="html"/>
</current>
</clover-report>
</target>
<!-- 下面用一个目标来初始化clover,编译源代码,unittest单元测试和clover分析-->
<target name="clover_report" depends="with.clover, compile,unittest, clover.html">
</target>
<delete dir="tempcloverreport"></delete>
<mkdir dir="tempcloverreport" />
<property name="clover.html" value="ok"<>/property>
<clover-report>
<current outfile="tempcloverreport">
<format type="html"/>
</current>
</clover-report>
</target>
<!-- 下面用一个目标来初始化clover,编译源代码,unittest单元测试和clover分析-->
<target name="clover_report" depends="with.clover, compile,unittest, clover.html">
</target>
这个任务的工作原理为,with.clover在初始化clover数据库后,监视compile;在javac编译java源代码时把记录代码执行的相关指令插入到java源代码中;在单元测试时,这些插入的代码就开始记录被测试代码的执行次数,把结果输出到clover数据库中;clover.html目标根据数据库中的数据生成html文件。
需要注意的几点:
·如果是执行cactus类的client/server测试,在服务端的类径中必须包含clover.jar类;
·clover 是一个商业工具,但可以得到30天的评估license;
·clover 在编译过程中改变了代码的执行路径,在产品发布时必须单独执行compile目标。
·Clover 分析结果