EMMA,它是一个免费、开源的、用来衡量单元测试覆盖度的工具。

  三者结合,利用EMMA产生的测试覆盖度报考,可以一目了然的知道那部分代码已经被测试,哪部分没有,从而控制单元测试的质量。

  EMMA生成的报告类似于Cobertura(另一个功能类似于EMMA的开源工具),请参考:用Ant+JUnit+Cobertura轻松控制单元测试质量: http://ouzhong.blog.hexun.com/32368833_d.html EMMA的优势在于更加轻量级,速度快,同时EMMA目前还在更新中。而Cobertura原开发团队转去做收费工具JCoverage之后,很少有更新。

  下面是一个本人测试能用的例子,Ant的配置文件。稍加修改能用到你的项目中。

  注:需把下载的EMMA jars 放到lib文件夹中。http://emma.sourceforge.net/

  -->

  metrics="method:70,block:80,line:80,class:100">

  columns="name,class,method,block,line" encoding="UTF-8"/>

  应用中遇到的问题及扩展:

  1、其他功能正常,但是单元测试覆盖率死活出不来也没有报错。查看ant运行内容,发现instrument(对编译在路径 ${classes.src} 中的Java类注入字节码)部分和gen-report-coverage(产生覆盖报告)部分始终没有执行内容。纠结排查了很久,发现原因竟然是这句中true后面多了个空格,导致emma.enabled无效,

  白白浪费了n多时间....

  2 、无论 java 源文件使用 UTF-8 还是 GB2312/GBK ,报告中的中文都显示为问号或乱码。

  参考资料: http://emma.sourceforge.net/reference/ch02s04s02.html

  解决方法:

  将

  改为

  此时, java 类的编码要使用 gb2312 或者 gbk ,生成的报告中文显示正常;如果 java 文件使用 utf-8 ,则还是乱码。

  3 、测试报告中没有 “ line, % 的报告,和具体 java 类的覆盖信息 ” ?

  分析配置文件片段: < javac classpath = "${build.java.dir}" srcdir = "${src.java.dir}" destdir = "${build.java.dir}"

  fork = "true" source = "1.5" target = "1.5" debug = "true" >

  < classpath refid = "compile.classpath" />

  分析结果:发现编译时,没有设置 debug 属性,增加 debug = "true" 或 debug="on" 后,问题解决。

  4、emma的示例代码里面,report的sourcepath属性只有一个src路径,如果项目里面有多个src路径同时要进行覆盖率检查的话,则需要这样写:

  ...

  不同的src路径用操作系统的classpath分隔符或逗号隔开,比如window用分号隔开,官网是这样解释的:

  参考资料部分

  1 、 EMMA 官方网址:( http://emma.sourceforge.net/ )

  文档: http://emma.sourceforge.net/reference/reference.html

  http://emma.sourceforge.net/docs.html#Reference+Documentation

  3 、 可爱的 MMA :测试 覆 盖率工具

  4 、 用 Emma 的 Eclipse 插件进行代码覆盖率测试

  5 、 测试覆盖率工具汇总