java junit 覆盖率,使用Clover为JUnit测试做测试覆盖率分析

最近一直在看《JUnit in Action》一书,前几章看的还行,到第九章就出问题了,因为我的Cactus总是配置不好,运行不起来。前几章还讲到了很多框架,比如Jetty、EasyMock、Clover等,也只是用了一次,它们的深奥之处还未领悟多少。索性选中Clover,看其一二。

《JUnit in Action》对Clover也是一带而过,只提了一下。在网上搜了半天,可参考的资料也很少,只有“java单元测试篇:使用clover为java代码的junit测试做覆盖率分析”一篇文章,转载的人很多,看了一些,发现文章中遗漏了很多代码,不知道是不是转载的问题。文中的例子是Junit包里带的,在Clover包的tutorial中也有,最后发现这篇文章是翻译的Clover的clover-manual.pdf中的Tutorials一章。读者可以参考其英文原文。

下面还是简要的介绍一下Clover在JUnit中的使用(构建工具为Ant):

1.在使用Clover做测试覆盖率分析之前请确保您的代码及测试代码无误。

2.如果采用Ant作为构建工具,则将clover.jar放入Ant的classpath下。也可采用另一种方法,可先将clover.jar及Clover中的另一个jar包cenquatasks.jar放入项目的lib下,采用cenquatasks.jar中的extendclasspath方法将clover.jar扩展到Ant下,在build.xml中加入以下代码:

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

3.添加clovertask到Ant中,如下:

4f1150b881333f12a311ae9ef34da474.png

4.在build.xml中加入clover的初始化任务:

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

注意:步骤3中的代码可放入4中。

5.加入一个或多个运行clover report的任务,最后的结果有多种输出方式:html、pdf、swing、xml等等。

其中,swing方式的代码如下:

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

html方式如下:

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

上面代码中都depends="clover",这里clover任务只是为了简洁而设,代码如下:

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

通过以上代码的设置即可运行clover.swing 或者clover.html运行Clover查看测试代码的覆盖率。测试结果如下图所示:

85988de7f10b122c686dd4aabded9638.png

其中build.xml中的运行JUnit测试代码的任务如下:

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

这是通过java命令运行的,也就是在MoneyTest.java中有main方法:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicstaticvoidmain(String args[])9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png        junit.textui.TestRunner.run(MoneyTest.class);

8f1ba5b45633e9678d1db480c16cae3f.png    }

还可以直接通过junit命令运行,如下:

4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

9b8a8a44dd1c74ae49c20a7cd451974e.png.."/>4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

以上两种test方法都可使用。

在所有任务中,首先要运行clover.init这样就能启动clover,对后面的任务进行监控并adapt一些操作,在随后的compile过程中,clover会记录所编译的java文件的各种数据并存入其db数据库,clover会监控随后运行的UnitTest,计算测试的覆盖率并写入数据库。这里有一点要注意:无论是采用java方式还是junit方式运行test房间,都要在命令中加入属性fork="true",这是因为clover要在JVM shutdown的时候将数据写入数据库,如果没有这个属性,就会出现“no coverage data found for *.db”错误,出现测试覆盖率均为0的结果。

posted on 2007-07-29 00:04 George Gong 阅读(2826) 评论(0)  编辑  收藏 所属分类: 单元测试及相关技术

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值