Emma in Ant for offline

1. 下载emma lib
http://sourceforge.net/projects/emma/files/emma-release/2.0.5312/emma-2.0.5312.zip/download
我下载的是emma-2.0.5312.zip

2. 解压emma-2.0.5312.zip,里面有一个lib目录,内含2个jar文件:
emma.jar
emma_ant.jar: 包含了Emma taskdefs
这两个文件都要放在项目的lib库里,可以在build.xml里设置一个path element以方便ant调用

<!-- directory that contains emma.jar and emma_ant.jar: -->
<property name="emma.dir" value="${basedir}/../lib" />

<path id="emma.lib" >
<pathelement location="${emma.dir}/emma.jar" />
<pathelement location="${emma.dir}/emma_ant.jar" />
</path>

<taskdef resource="emma_ant.properties" classpathref="emma.lib" />


2. offline模式,先给需要进行代码覆盖的class文件加字节码

<target name="emma" description="turns on EMMA instrumentation/reporting" >
<property name="emma.enabled" value="true" />
<!-- EMMA instr class output directory: -->
<property name="out.instr.dir" value="${basedir}/outinstr" />
<mkdir dir="${out.instr.dir}" />
</target>


<target name="emma.add.bytecode" depends="init, compile" description="Emma add bytecode to classes" >
<emma enabled="${emma.enabled}" >
<instr instrpathref="run.classpath"
destdir="${out.instr.dir}"
metadatafile="${coverage.dir}/metadata.emma"
merge="true">
<filter includes="classes name or classes package which you want to coverage">
<filter excludes="classes name or classes package which you do not want to coverage">
<filter value="+classes, -classes">
<filter file="filter.txt">
</instr>
</emma>
</target>

注:
(1) instr是emma的字节码插入器,它是在编译好的classes目录里把需要进行coverage的class文件插入bytecode,并copy到
${out.instr.dir}目录,生成metadata.emma文件
(2) filter用于匹配哪些类需要或者不需要进行coverage,可以用includes\excludes\value\file这几种方式,支持*匹配符。file方式里的文件可以是这样的:
#-表示这个类不需要coverage
-com.foo.test.*
#+表示需要
+com.foo.*

3. 运行代码,或者是运行junit来执行代码,这里是用emma下载包里自带的example为例是执行代码,注意加的两个jvmarg,把运行代码的覆盖率文件coverage.emma生成,以及生成的内容是merge方式

<target name="run" depends="emma.add.bytecode" description="Execute code or run junit test">
<java classname="Main" fork="true" >
<classpath>
<pathelement location="${out.instr.dir}" />
<path refid="run.classpath" />
<path refid="emma.lib" />
</classpath>
<jvmarg value="-Demma.coverage.out.file=${coverage.dir}/coverage.emma" />
<jvmarg value="-Demma.coverage.out.merge=true" />
</java>
</target>


4. 生成report,根据前两步的metadata.emma和coverage.emma两个文件,生成txt和html两种格式的report
  <target name="emma.report" depends="run" description="Generate the emma report">
<emma enabled="${emma.enabled}" >
<report sourcepath="${src.dir}" >
<fileset dir="${coverage.dir}" >
<include name="*.emma" />
</fileset>

<txt outfile="${coverage.dir}/coverage.txt" />
<html outfile="${coverage.dir}/coverage.html" />
</report>
</emma>
</target>


<report>的sourcepath用于指定源代码目录,这样可以在html里看到哪些代码被coverage了。
其他的一些参数:
depth: 指定report细到哪一层,可以为以下的值:

* all
* package
* source
* class
* method

encoding: 指定report的字符集
参考:
http://emma.sourceforge.net/userguide_single/userguide.html
http://emma.sourceforge.net/reference_single/reference.htm

原文地址:http://hi.baidu.com/lettoo/blog/item/da98a0038edaaae708fa93cd.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值