java单元测试篇:使用clover为junit单元测试做覆盖率分析

本文介绍了如何利用Clover框架分析Java程序的单元测试覆盖率。通过一个实例展示了如何结合JUnit和Clover,使用Ant编译项目,并在build.xml中添加Clover任务。文章详细阐述了设置环境、构建流程、生成覆盖率报告的过程,旨在帮助读者理解如何提高单元测试覆盖率。
摘要由CSDN通过智能技术生成

本人最近在研究java单元测试技术,有点心得,这里分享给测试同行朋友!那么,今天我们研究的主题是使用cenqua公司的clover框架来分析java程序的单元测试覆盖率!关于clover的更多信息呢,请大家去http://www.cenqua.com/clover 去查询。我们这里,将会通过一个实例来演示如何使用junit和clover一起,来分析java代码的覆盖率。我们将会使用ant来编译一个junit单元测试实例项目,然后修改build.xml文件,加上clover的覆盖率分析任务target;而且我们还要通过三部分来学习clover超级无敌的地方:current报告、历史报告以及高级特征!

    那么最开始呢,我们要做的就是从http://www.cenqua.com/clover下载clover程序包clover.jar(它是clover的主要包)、clover.license(clover的试用license,需要到官方网站下载一个月的试用注册文件,否则不能使用clover!)、velocity.jar(用来创建html报告的扩展包),将它们拷贝到ant(ant你已经安装好了,并且设置了junit.jar以及ANT_HOME之类的初始化工作;我们这里不讲ant的基本使用,它都流行这么多年了,这里假设你都懂啦!)的lib目录下,这样下来,我们在ant的build.xml文件里才可以使用clover任务!

    当然,现在很多朋友不喜欢配置一些环境变量,想把这些jar文件放在任意的地方,例如直接放在项目文件里,那么可以通过在build.xml文件里指定这些扩展包的位置也是可以的;如果在build文件里加入扩展包的路径,需要在build文件里这样写:

1) 我们把下载来的clover.jar和cenquatasks.jar拷贝到你的项目目录的lib路径下

2) 在build.xml下添加如下代码:

<taskdef resource="com/cenqua/ant/antlib.xml" classpath="lib/cenquatasks.jar"/>
<extendclasspath path="lib/clover.jar"/>
<taskdef resource="clovertasks" classpath="lib/clover.jar"/>

之后你就可以在ant任务里构建clover的任务啦!

 

    其实最简单的办法呢,就是把clover.jar、clover.license、velocity.jar、cenquatasks.jar、junit.jar这些包都拷贝到ant的lib目录里,省得麻烦,不然将来你加入什么新功能,就会提示你找不到相应的包,你还得去网上搜,特不爽!

我们的学习过程是:

  • 先使用 junit 创建完 java 代码的测试代码,之后编译运行,完成 junit 对 java 代码的单元测试;
  • 之后,我们在 ant 里构建测试任务,自动完成企业集的单元测试工作
  • 然后,我们修改 build 文件,加入 clover 任务,来完整对单元测试过程的覆盖率分析工作
  • 最后开始重构代码,提高代码的单元测试覆盖率

一、 构建java源代码与junit单元测试代码

    先在你的电脑里的某个比较顺眼的盘下建立一个目录,例如叫sincky,这个就是我们的学习项目目录,再在sincky里创建一个src文件夹,用来放置所有的代码;之后在src里新建一个java类的源文件,名字叫做IMoney.java,代码内容如下:

public interface IMoney {

/**

* Adds a money to this money.

*/

public abstract IMoney add(IMoney m);

/**

* Adds a simple Money to this money. This is a helper method for

* implementing double dispatch

*/

public abstract IMoney addMoney(Money m);

/**

* Adds a MoneyBag to this money. This is a helper method for

* implementing double dispatch

*/

public abstract IMoney addMoneyBag(MoneyBag s);

/**

* Tests whether this money is zero

*/

public abstract boolean isZero();

/**

* Multiplies a money by the given factor.

*/

public abstract IMoney multiply(int factor);

/**

* Negates this money.

*/

public abstract IMoney negate();

/**

* Subtracts a money from this money.

*/

public abstract IMoney subtract(IMoney m);

/**

* Append this to a MoneyBag m.

*/

public abstract void appendTo(MoneyBag m);

}

 这里我们定义一个java接口,表示了“金钱”这个神奇东西的一些美妙的抽象方法!早年有首迟志强的歌叫《钞票》:是谁制造的钞票,你在世上逞霸道,有人为你愁眉苦脸啊有人为你哈哈笑;姑娘为你走错了路,小伙子为你受改造!东奔又西跑,点头又哈腰,钞票!人人为你离不了钱哪!你这杀人不见血的刀…形象无比,不扯了,跑题啦!I am back!

之后我们实现这个接口,在src文件夹下定义一个叫做Money.java的类:

public class Money implements IMoney {


private int fAmount;

private String fCurrency;


/**

* Constructs a money from the given amount and currency.

*/

public Money(int amount, String currency) {

fAmount= amount;

fCurrency= currency;

}

/**

* Adds a money to this money. Forwards the request to the addMoney helper.

*/

public IMoney add(IMoney m) {

return m.addMoney(this);

}

public IMoney addMoney(Money m) {

if (m.currency().equals(currency()) )

return new Money(amount()+m.amount(), currency());

return MoneyBag.create(this, m);

}

public IMoney addMoneyBag(MoneyBag s) {

return s.addMoney(this);

}

public int amount() {

return fAmount;

}

public String currency() {

return fCurrency;

}

public boolean equals(Object anObject) {

if (isZero())

if (anObject instanceof IMoney)

return ((IMoney)anObject).isZero();

if (anObject instanceof Money) {

Money aMoney= (Money)anObject;

return aMoney.currency().equals(currency())

&& amount() == aMoney.amount();

}

return false;

}

public int hashCode() {

return fCurrency.hashCode()+fAmount;

}

public boolean isZero() {

return amount() == 0;

}

public IMoney multiply(int factor) {

return new Mo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值