软件测试


网站首页 | 软件测试论坛 | 软件测试培训 | 软件测试博客 | 软件测试杂志 | 软件测试沙龙 | 软件测试下载 | 软件测试顾问
业界新闻 | 软件测试人才 | 软件测试技术 | 软件测试工具 | 行业软件测试 | 软件测试管理 | 软件质量专栏 | 软件开发专栏
当前位置:首页>>软件测试技术>>单元测试>>正文
java单元测试篇:使用clover为java代码的junit测试做覆盖率分析(三)
文章出处:http://blog.51testing.com/ 作者:sincky 发布时间:2005-11-21

三、修改build.xml文件添加clover任务

现在我们开始修改build.xml文件,添加clover任务,以实现junit测试覆盖率的分析。首先,我们添加clover任务的配置任务;在build.xml文件里添加如下代码:

这两行定义了能够在ant文件里使用clover任务的配置工作。然后再添加一个clover任务,用来启动clover构建任务:

这里的initString定义了clover覆盖数据库的信息,它会在执行clover任务时自动创建,里边保存了源路径执行测试任务时候的全部信息,clover通过这个demo_coverage.db来创建覆盖率分析报告。如果这个demo_coverage.db存在,clover在每次运行时自动覆盖,如果不存在,clover自动创建它。

我们这里使用clover,是为了搜集junit测试时候的覆盖率信息,所以呢,junit测试过程中,我们需要使用clover.jar包,所以我们还需要把clover.jar文件作为junit运行的依赖库,因此修改build.classpath代码成如下所示:

这里顺便我们也把path的值说明一下,省得有人不懂哦!这里的ant.home是在计算机里创建的环境变量ANT_HOME,它的值应该是你的ant的安装路径,例如c:ant,所以前两行代码的意思,就是把c:antlibclover.jarc:antlibjunit.jar作为依赖库。当然,事先你一定要拷贝这两个jar文件到你的lib目录。

好了,我们现在开始重新使用clover任务来运行junit测试!

C:cloversincky>ant clean

Buildfile: build.xml

clean:

[delete] Deleting directory C:cloversinckybuild

BUILD SUCCESSFUL

Total time: 0 seconds

C:cloversincky>ant clover compile

Buildfile: build.xml

clover:

[clover-setup] Clover Version 1.3.8, built on May 18 2005

[clover-setup] loaded from: C:cloverlibclover.jar

[clover-setup] 30 day Evaluation License registered to sinckyzhang@163.com

[clover-setup] You have 10 day(s) before your Evaluation License expires.

[clover-setup] Clover is enabled with initstring 'C:cloversinckydemo_coverage.db'

compile:

[mkdir] Created dir: C:cloversinckybuild

[javac] Compiling 4 source files to C:cloversinckybuild

[clover] Clover Version 1.3.8, built on May 18 2005

[clover] loaded from: C:cloverlibclover.jar

[clover] 30 day Evaluation License registered to sinckyzhang@163.com

[clover] You have 10 day(s) before your Evaluation License expires.

[clover] No coverage database 'C:cloversinckydemo_coverage.db' fou

nd. Creating a fresh one.

[clover] Clover all over. Instrumented 4 files.

BUILD SUCCESSFUL

Total time: 2 seconds

我们会发现在sincky目录下多了一个demo_coverage.db文件;之后我们再执行测试任务:

C:cloversincky>ant test

Buildfile: build.xml

test:

[java] ......................

[java] Time: 0

[java] OK (22 tests)

BUILD SUCCESSFUL

Total time: 0 seconds

我们会看到又多了一个关于junit测试的.db文件!现在,我们已经使用clover统计完了覆盖率信息,之后创建clover报告,以直观方式来查看具体的覆盖率结果!这个任务需要在build.xml里创建任务。Clover的报告有多种方式:htmlpdfxml以及swingview的图形化报告,当然与eclipsejavaIDE集成,也会在IDE里创建报告;这里我们只演示html类型的报告!我们修改build.xml文件,添加如下任务:

这里的元素指产生的报告类型是当前的测试报告,还有历史报告,我们在后边讲解!这个报告是html格式,创建后的报告放在一个叫做clover_html的文件夹里,报告标题叫做Clover demo

我们现在给出完整的修改后的build.xml文件:

moneytest build file

fork="yes">

现在我们执行report这个任务:

C:cloversincky>ant report

Buildfile: build.xml

clover:

[clover-setup] Clover Version 1.3.8, built on May 18 2005

[clover-setup] loaded from: C:cloverlibclover.jar

[clover-setup] 30 day Evaluation License registered to sinckyzhang@163.com

[clover-setup] You have 10 day(s) before your Evaluation License expires.

[clover-setup] Clover is enabled with initstring 'C:cloversinckydemo_coverage.db'

report:

[clover-report] Clover Version 1.3.8, built on May 18 2005

[clover-report] loaded from: C:cloverlibclover.jar

[clover-report] 30 day Evaluation License registered to sinckyzhang@163.com

[clover-report] You have 10 day(s) before your Evaluation License expires.

[clover-report] Loaded results from 1 coverage recording.

[clover-report] Writing report to 'C:cloversinckyclover_html'

[clover-report] Done. Processed 1 packages.

BUILD SUCCESSFUL

Total time: 1 second

现在你可以打开sincky下的clover_html文件夹下的index.html文件,如下所示:

junit的图片

报告最左边是包名,以及包下边的类;右边是主窗口,显示当前这个Money类的测试覆盖率,我们可以通过行号来查看到151617行执行了156次,下边还会有两行一次也没有执行过,所以造成这个类整体的测试覆盖率不是100%。

40

27

if (isZero())

41

0

if (anObject instanceof IMoney)

42

0

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

四、重构测试代码实现百分百测试覆盖率

我们总是希望做单元测试的时候,让代码的测试覆盖率尽可能的达到100%,所以我们需要重构测试代码。从分析得知,第40行虽然执行了27次,但是从来没有测试if的判断条件为true的情况,所以我们要添加测试用例,测试isZero()返回为true的情况!因此,我们修改测试代码MoneyTest.java文件,在前边初始化地方加上一个Money实例,如下:

public class MoneyTest extends TestCase {
   private Money f12CHF;
   private Money f14CHF;
   private Money f7USD;
   private Money f21USD;
   private Money f0USD;

setup方法里添加:

protected void setUp() {

f12CHF= new Money(12, "CHF");

f14CHF= new Money(14, "CHF");

f7USD= new Money( 7, "USD");

f21USD= new Money(21, "USD");

f0USD = new Money(0, "USD"); //sincky

在最后加上一个测试用例:

public void testMoneyEqualsZero() {

assertTrue(!f0USD.equals(null));

IMoney equalMoney = new Money(0, "CHF");

assertTrue(f0USD.equals(equalMoney));

}

之后,我们重新编译,测试,创建报告,即执行下列命令:

>ant clean

>ant clover compile

>ant test

>ant report

这时候再打开新的html报告,看到如下效果覆盖率已经到达100%:

junit的图片

完毕,如果能进展到这一步,相信你已经对使用junitantcloverjava的单元测试,已经到了一个新的飞越!如果有兴趣,你还可以把junit报告和clover报告一并输出,以更好的为企业开发中使用这种工作模式!

文章源码均来自clover网站,本人稍做修改。

写在后面的话:目前国内单元测试尚在起步阶段,由于工作量大,耗时耗成本,很多公司都省去该环节;但是使用一些先进的技术,对源代码一些关键的类进行单元测试是可行的,也是必要的;希望本文对测试与java开发界朋友有所收获,Sincky在来日会写一些关于clover高级应用的文章,分享给大家!(20059月于上海 台风暴雨夜)


站内搜索
相关文章
◎java单元测试篇:使用clover为java代码的junit测试做覆盖率分析(二)
◎java单元测试篇:使用clover为java代码的junit测试做覆盖率分析(一)
◎数据库程序的单元测试
◎防御性编码和单元测试“交通规则”
◎单元测试实践(VB版)
◎Linux:让内存不再泄漏
◎感悟测试驱动开发
◎软件测试技术获重大突破
◎PHP单元测试工具PHPUnit初体验
◎使用NUnit在.Net编程中进行单元测试
◎Java性能的优化
◎Java内存泄漏分析
◎Java的内存泄漏
◎NUnit快速入门
◎单元测试方法
◎单元测试浅析
◎java的单元自动化测试---jtest
◎Java程序的单元测试
◎自动进行团队构建和单元测试过程
◎C语言单元测试框架-Check
◎在Eclipse中使用JUnit
◎EasyMock与JMock的比较
◎FindBugs第1部分: 提高代码质量
◎静态测试
◎测试Linux的可靠性
◎TestNG使Java单元测试轻而易举
◎诊断 Java 代码:单元测试与自动化代码分析协同工作
◎JBuilder单元测试实例
◎使用Rational Software Architect
◎怎样使用Junit Framework进行单元测试的编写
◎“白盒”静动测试两齐全
热门文章
◎全面介绍单元测试
◎单元测试------理论篇
◎Java内存泄漏分析
◎单元测试作业指导书(一)
◎junit实现过程
◎白盒测试中的六种覆盖方法
◎JUnit起步
◎单元测试方法
◎C/C++单元测试问答(摘要)
◎nunit使用资料
◎单元测试的基本方法
◎如何挑选白盒测试工具
◎NUnit快速入门
◎在Eclipse中使用JUnit
◎Java的内存泄漏
◎Linux:让内存不再泄漏
◎单元测试的小技巧介绍和举例
◎单元测试指导
◎为什么要进行单元测试?
◎单元测试作业指导书(二)
◎“白盒”静动测试两齐全
◎数据库程序的单元测试
◎静态测试
◎单元测试浅析
◎ant结合junit进行软件自动测试
◎单元测试作业指导书(三)
◎单元测试作业指导书(四)
◎CppUnit - 测试驱动开发入门
◎用cppUnit进行单元测试的步骤
◎java单元测试篇:使用clover为java代码的junit测试做覆盖率分析(一)
◎java的单元自动化测试---jtest
◎使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Te...
◎C语言单元测试框架-Check
◎EasyMock与JMock的比较
◎Java程序的单元测试
◎JUnit中如何测试异常
◎怎样使用Junit Framework进行单元测试的编写
◎使用NUnit在.Net编程中进行单元测试
◎J2EE应用的性能调整--JPROBE使用篇
◎单元测试和事先测试开发
◎JBuilder单元测试实例
◎感悟测试驱动开发
◎单元测试实践(VB版)
◎软件测试技术获重大突破
◎C语言高效编程的的四招技巧
◎使用ant编译、运行junit、以及检查编码
◎JCoverage使用
◎让编译和测试过程自动化
◎自动进行团队构建和单元测试过程
◎有关Junit的多线程测试

Google提供的广告