Hudson,?Ant,?EMMA,?JUnit的集成

来源:百度文库 编辑:神马文学网 时间:2024/05/04 10:50:22

    Hudson和Ant,JUnit相信大家都熟悉了,或者有所了解. 但是对EMMA可能不是太熟悉吧, 前段时间我也是第一次听说过个东东.在论坛上发帖问过, 但laofo这个家伙给我整了一大篇的英文, 我楞是没看明白。

   后来在网上找到点资料,再加上自己的一些研究的东西,于是决定把它写下来。

   

   一、EMMA简介

   

    EMMA是一个用于检测和报告 JAVA代码覆盖率的开源工具。它不但能很好的用于小型项目,很方便得得出覆盖率报告,而且适用于大型企业级别的项目。

  EMMA有许多优点,首先你能免费得到它,并把它用于自己项目的开发。它支持许多种级别的覆盖率指标:包,类,方法,语句块(basicblock)和行,特别是它能测出某一行是否只是被部分覆盖,如条件语句短路的情况。它能生成 text,xml,html等形式的报告,以满足不同的需求,其 html 报告提供下钻功能,我们能够从 package开始一步步链接到我们所关注的某个方法。EMMA 能和 Makefile 和 Ant集成,便于应用于大型项目。特别还须指出的一点是,EMMA 的效率很高,这对于大型项目来说很重要。

  EMMA 是通过向 .class 文件中插入字节码的方式来跟踪记录被运行代码信息的。EMMA 支持两种模式:On thefly 和 Offline 模式。

    1): Onthe fly 模式往加载的类中加入字节码,相当于用 EMMA 实现的 application class loader 替代原来的application class loader。

  2): Offline 模式在类被加载前,加入字节码。

  On the fly 模式比较方便,缺点也比较明显,如它不能为被 boot class loader加载的类生成覆盖率报告,也不能为像 J2EE 容器那种自己有独特 class loader 的类生成覆盖率报告。这时,我们能求助于Offline 模式。

  EMMA 也支持两种运行方式:Command line 和 Ant。

  命令行一般和 On the fly 模式一起适用,对于简单的项目能够快速产生覆盖率报告。通过 Ant task 来运行EMMA 的话,特别适用于大型的项目。

 

   二、EMMA作用

 

测试驱动开发(TDD)是极限编程的一个重要特点,它具有很多优点,并被越来越多的开发人员所接受。在测试驱动开发过程中,程序员经历了编写测试用例,实现功能,重构代码这个不断迭代的过程。实践证明,这个过程能显著提高我们的生产效率,并产生高质量的代码。它还能给我们以自信,让我们放心的重构自己的代码。

  测试代码确实能够保证代码的质量,但如果你以为自己已经写了一堆测试用例,并都能运行通过时,就能高枕无忧了,那么你错了。隐藏的Bug也许只是在等待时机让你的系统崩溃。这是什么原因呢?聪明的你肯定已经想到,测试代码是用来保证功能代码的质量的,但测试代码的质量如何,我们不得而知。我们需要知道,我们辛苦编写的测试代码到底覆盖了多少功能代码。

   看到这里,EMMA的作用就可以总结为:用于测量你的测试代码的覆盖率,从而让你更有底气的保证你的代码的质量。

 

   三、EMMA与Ant的集成

 

   上面提到了,EMMA 支持两种模式:On the fly 和 Offline 模式,这次我主要研究的是Offline这种模式。

   首先:下载emma.jar和emma_ant.jar两个包。

   其次:最重要的部分,即脚本内容啦。

 

  

 

 

 

 

 

 

 

  四、Hudson的集成

    启动hudson,然后下载EMMA plugin,在你的项目配置界面,选中Record Emma coverage report选项,然后填写你的报表的路径,默认报表格式为html,但是在节点五里面我们可以看到,可以将其设置为XML格式,这是因为hudson目前的EMMAplugin只支持XML格式的,当然有兴趣的话可以对这个plugin进行扩展,使其支持html格式。    

   与hudson集成成功后,可以得到如下面的图:

 

   哈哈,是不是看着是一条直线啊。这个是因为我一直使用JUnit提供的一个sample,我没在改动过里的代码,所以得到的就是一条直线,如果是在真正的项目中,这里应该是曲线。

   细心的读者会发现,我在产生report的时候生成两种格式的,一种是XML,另一种是HTML。前一种放到hudson里面更直观,而后一种更详细。下面给出html格式的截图:

 

总的情况:

 

包内情况:

 

 

代码内部情况:

图示1

 

 

图示2:

 

   五、总结

 我在做这次集成的时候,遇到的难点部分。第一:在做emma测试的时候,一开始弄不清楚它的流程,所以不知道XML怎么样写,后来在网上找到点资料才做出来;第二:在生成emma报表的时候,默认生成的是html格式,但是不能与hudson集成,后来直接试验能不能生成XML格式的,试验成功;第三:现在是JUnit与emma一起做的,但是emma能不能单独的做为一个模块来运行,还没研究,以后有了结果再发布上来。