Username:
Password:
Remember Me?
JBuilder2005单元测试之JUnit框架
< 上一篇
|
下一篇 >
来源:linux宝库作者:linux宝库 发布时间:2007-09-30 00:00:00
简单的框架
JUnit是由Erich Gamma和Kent Beck研发的开源测试框架,JBuilder整合了这个框架并对此做了扩展。JUnit之所以流行并为广大的研发人员所推崇,一是因为他实战性强,功能强大,二是因为他实在简单。一个产品或框架要能有生命力,最好都具备这样的特点。
简单地讲这个框架提供了许多断言(assert)方法,允许您配置测试的规则,如:assertEquals()、assertNull()、assertNotSame()、assertTrue()等方法,一个测试用例包括了多个断言,当运行测试用例后,JUnit运行器会报告哪些断言没有通过,研发人员就可顺藤摸瓜搞个水落石出了。而传统的测试方法需要将期望的结果用诸如System.out.println()等语句将过程信息打印到控制台或日志中,由研发人员观察输出信息以判断是否正确,现在这种"观察"的工作由JUnit的那些assertXxx()方法自动完成。
JUnit的测试框架类结构很简单,主要由3个类组成,其类图关系如下图所示:
图 错误!文档中没有指定样式的文字。JUnit测试框架类结构
?junit.framework.Test:测试接口。
?junit.framework.TestCase:测试用例类,业务类的测试用例类只需要承继这个TestCase,根据情况编写若干个public void testXxx()方法,在方法中通过assertYyy()定制若干测试规则就能够了。
?junit.framework.TestSuite:测试套件类,他能够将多个测试用例类捆绑在一起运行,也能够捆绑另一个测试套件。
测试固件(Fixture)
一个测试用例能够包含若干个testXxx()测试方法,测试用例测试一个或多个类API接口的正确性,当然在调用类API时,需要事先创建这个类的对象及一些关联的对象,这组对象就称为测试固件(Fixture),相当于测试用例的"工作对象"。
我们在前面说过,一个测试用例类能够包含多个testXxx()方法,在运行时,每个测试方法都对应一个测试用例类的实例。当然,您能够在具体的testXxx()方法里声明并实例化业务类的实例,在测试完成后再销毁他们。但是,这么一来您就要在每个testXxx()方法中都重复这些代码,因为TestCase实例被运行时,依照以下步骤运行:
1.创建测试用例的实例。
2.调用setUp()方法,执行一些初始化工作。
3.运行testXxx()测试方法。
4.调用tearDown()方法,执行销毁对象的工作。
假如测试用例类中有多个testXxx()方法,且他们都需要使用到相同的一组对象,我们能够在setUp()中实例化这组对象,并在tearDown()中销毁他们。要编写测试固件,依照以下步骤进行:
1.创建TestCase类的子类。
2.在子类中声明若干个测试所用的对象。
3.覆盖setUp()方法,在方法中实例化这些对象。
4.覆盖tearDown()方法,释放这些对象的资源。
如下面即是个简单的测试固件:
代码清单 错误!文档中没有指定样式的文字。测试固件
1. public class MoneyTest extends TestCase
2. {
3.
private Money f12CHF;//12瑞士法郎
4.
private Money f14CHF; //14瑞士法郎
5.
private Money f28USD; //28美国美元
6.
protected void setUp() {
7.
f12CHF= new Money(12, "CHF");
8.
f14CHF= new Money(14, "CHF");
9.
f28USD= new Money(28, "USD");
10.
}
11.
protected void tearDown(){}
12. }
第3~5行声明了3个Money类对象(测试固件),在setUp()方法中实例化这3个对象(第7~9行),由于这些对象能够被垃圾进行直接回收,所以在tearDown()中不做任何操作。
测试用例(TestCase)
有了测试固件,就能够开始编写测试用例的测试方法了。当然您也可无需测试固件而直接编写测试用例方法。下面我们在测试固件的基础上添加测试用例方法testMoneyBag(),代码如下所示:
代码清单 错误!文档中没有指定样式的文字。测试用例方法
1. public class MoneyTest extends TestCase
2. {
3.
private Money f12CHF;//12瑞士法郎
4.
private Money f14CHF; //14瑞士法郎
5.
private Money f28USD; //28美国美元
6.
protected void setUp() {
7.
f12CHF= new Money(12, "CHF");
8.
f14CHF= new Money(14, "CHF");
9.
f28USD= new Money(28, "USD");
10.
}
11.
public void testMoneyBag()
12.
{
13.
Money bag[]= { f26CHF, f28USD };
14.
MoneyBag expected= new MoneyBag(bag);
15.
assertEquals(expected, f12CHF.add(f28USD.add(f14CHF)));
16.
}
17.
protected void tearDown(){}
18. }
测试方法都必须以test为前缀,且必须是public void的,运行器以此为反射查找规则找到这些测试用例方法。在一个方法中能够包括多个assertYyy()方法,每个assertYyy()方法都是个测试规则。像第15行的assertYyy()断言方法即为测试Money的add()方法和MoneyBag类正确性的测试规则。
您能够在MoneyTest中添加多个public void testXxx()方法,运行器为每个方法生成一个测试用例实例,分别运行。
测试套件(TestSuite)
假如每次只能运行一个测试用例,那么又陷入了我们前面所谈到的传统测试的窘境:手工去运行一个个测试用例,测试套件专门为解决这一问题而来。他通过TestSuite对象将多个测试用例组装成到一个测试套件,则测试套件批量运行。需要特别指出的是,能够把一个测试套件整个添加到另一个测试套件中,就象小筐装进大筐里变成一个箧相同。
测试套件类也通过承继TestCase类实现,只但是他提供了一个public static Test suite()静态方法,在该方法中将多个测试用例捆绑组装在一起。一个典型的测试套件代码如下所示:
代码清单 错误!文档中没有指定样式的文字。测试套件
1. public class MoneyTestSuite extends TestCase
2. {
3.
public TestSuite1(String s)
4.
{
5.
super(s);
6.
}
7.
public static Test suite()
8.
{
9.
TestSuite suite = new TestSuite();
10.
suite.addTestSuite(MoneyTest.class);
11.
suite.addTestSuite(MoneyBag.class);
12.
return suite;
13.
}
14. }
在第9行中声明并实例化了一个TestSuite,在第10、11行分别加入一个测试用例。您能够通过suite.addTest(Test t)方法添加一个套件。这样运行这个套件就能够自动运行任何测试用例的测试方法了。
测试运行器
JUnit提供了3个标准的测试运行器运行这些测试用例或测试套件,这3个测试运行器分别是:
?junit.textui.TestRunner:文本测试运行器。
?junit.awtui.TestRunner:使用AWT组件界面的测试运行器。
?junit.swingui.TestRunner:使用Swing组件界面的测试运行器。
下面是基于AWT组件的测试运行器,如下图所示:
图 错误!文档中没有指定样式的文字。AWT测试运行器
?Test class name:指定测试用例类和测试套件类。
?一个进度条:表示运行测试的执行进度,进度条下是正确、错误、失败的测试统计数。
?Error and Failures:列出了测试错误和失败的列表,点选其中的一个选项时,JUnit在窗口底部列出错误跟踪迹。
提示:
JBuilder提供了方便的运行测试用例和测试套件类的方法,您只须点击鼠标右键就可直接调用了。此外,JBuilder提供了一个JBTestRunner测试运行器,在功能和易用性上非JUnit提供的测试运行器所能媲美。JBuilder支持JUnit所提供的两个测试运行器:junit.textui.TestRunner和junit.swingui.TestRunner。
喜欢本文,那就收藏到:
上一篇:
Eclipse插件ContinuousTesting介绍
下一篇:
Java+XML+MVC框架StrutsCX简介
相关评论
我也要评论
还没有关于此文章的相关评论!
首页
上一页
下一页
尾页
昵称:
(为空则显示guest)
评论分数:
★
★ ★
★★★
★★★★
★★★★★
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
相关推荐
xml轻松学习手册(3)xml的术语_xml教程
xml轻松学习手册(4)xml语法_xml教程
xml轻松学习手册(5)xml实例解析_xml教程
了解web页面工具语言xml(一)产生背景_xml教程
了解web页面工具语言xml(二)定义_xml教程
了解web页面工具语言xml(三)支持工具_xml教程
了解web页面工具语言xml(四)应用分类_xml教程
了解web页面工具语言xml(五)好处_xml教程
了解web页面工具语言xml(六)展望_xml教程
xml技术上传文档_xml技巧
相关资讯
Perl/TkFAQ-12.10怎样在C程式中调用Perl代码?
PERL怎样利用WIN32ODBC插件和数据库结合
perl模拟windows的查找
Perl的程式:mkm3u
MP3在线播放Web服务器的实现
Linux环境下Perl语言对数据库的操纵
IP鉴定子程式
cgi中域名转向的原理
cgi中的邮件发送器
cgi环境变量列表程式
点击发布文章
导航
主页
设为首页
加入收藏
联系我们
赞助商
文章类别
行业资讯
域名资讯
虚拟主机
托管租用
VPS
CDN
网站运营
技术资讯
Mac OS
网络设备
路由技术
网络技术
HTML/DHTML
源码天堂
网络编程
Java
Perl
C/C++
Shell
数据库其他
DB2
Sybase
存储备份
硬件技术
网站建设
通信技术
虚拟化技术
安全其他
安全工具
加密和破解
数据库安全
程序安全
网络安全
系统安全
防火墙
VPN
网管技术其他
Informix
Oracle
PostgreSQL
Dreamweaver教程
windows操作系统
XML编程
NET编程
JSP编程
PHP编程
ASP编程
Mssql
Mysql
Access
Coreldraw
flash
web服务器
ftp服务器
mail服务器
邮件系统
IBM-AIX
HP-UX
Sco
Solaris
FreeBSD
Linux
Proxy
CSS教程
Javascript教程
Ajax
dns服务器
Photoshop教程
站长资讯
冲浪宝典
订阅
Rss Feed
主机赞助商连接:
华夏名网虚拟主机域名注册
关于我们 | 网站声明 | 联系我们 | 广告服务 IDC中文资讯站-客观公证的IDC产业权威媒体
Copyright
@
2007-2008 IDCNEWS.NET, All Rights Reserved
蜀ICP备07504800号