技术开发 频道

实战每晚构建之主要技术

    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>

    下面的代码产生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>

    这个任务的工作原理为,with.clover在初始化clover数据库后,监视compile;在javac编译java源代码时把记录代码执行的相关指令插入到java源代码中;在单元测试时,这些插入的代码就开始记录被测试代码的执行次数,把结果输出到clover数据库中;clover.html目标根据数据库中的数据生成html文件。

    需要注意的几点:

    ·如果是执行cactus类的client/server测试,在服务端的类径中必须包含clover.jar类;

    ·clover 是一个商业工具,但可以得到30天的评估license;

    ·clover 在编译过程中改变了代码的执行路径,在产品发布时必须单独执行compile目标。

    ·Clover 分析结果

0
相关文章