分享
 
 
 

循序渐进学习Junit

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

使用最流行的开放资源测试框架之一学习单元测试基础。

使用JUnit可以大量减少Java代码中程序错误的个数,JUnit是一种流行的单元测试框架,用于在发布代码之前对其进行单元测试。现在让我们来具体研究如何使用诸如JUnit、Ant和Oracle9i JDeveloper等工具来编写和运行单元测试。

为什么使用JUnit?

多数开发人员都同意在发布代码之前应当对其进行测试,并利用工具进行回归(regression)测试。做这项工作的一个简单方法是在所有Java类中以main()方法实施测试。例如,假设使用ISO格式(这意味着有一个以这一格式作为参数的构造器和返回一个格式化的ISO字符串的toString()方法)以及一个GMT时区来编写一个Date的子类。清单1 就是这个类的一个简单实现。

不过,这种测试方法并不需要单元测试限定语(qualifier),原因如下:

在一个类中进行测试的最小单元是方法,你应当对每个方法进行单独测试,以准确地找出哪些方法工作正常,哪些方法工作不正常。

即使前面的测试失败,也应当对各个方法进行测试。在此实施中,假如单个测试失败,后面的测试将根本不会运行。这就意味着你不会知道不良代码在你的实施中所占的百分比。

测试代码会出现在生成的类中。这在类的大小方面可能不是什么问题,但却可能会成为安全性因素之一:例如,假如你的测试嵌入了数据库连接密码,那么这一信息将很轻易用于已发布的类中。

没有框架可以自动启动这一测试,你必须编写一个脚本来启动每一个测试。

在编写一个报告时,你必须编写自己的实现,并定义规则,以方便地报告错误。

JUnit框架就是设计用来解决这些问题的。这一框架主要是所有测试实例(称为"TestCase")的一个父类,并提供工具来运行所编写的测试、生成报告及定义测试包(test suite)。

让我们为IsoDate类编写一个测试:这个IsoDateTest类类似于:

import java.text.ParseException;

import junit.framework.TestCase;

/**

* Test case for <code>IsoDate</code>.

*/

public class IsoDateTest extends TestCase {

public void testIsoDate() throws

Exception {

IsoDate epoch=new IsoDate(

"1970-01-01 00:00:00 GMT");

assertEquals(0,epoch.getTime());

IsoDate eon=new IsoDate(

"2001-09-09 01:46:40 GMT");

assertEquals(

1000000000L*1000,eon.getTime());

}

public void testToString() throws

ParseException {

IsoDate epoch=new IsoDate(0);

assertEquals("1970-01-01

00:00:00 GMT",epoch.toString());

IsoDate eon=new IsoDate(

1000000000L*1000);

assertEquals("2001-09-09

01:46:40 GMT",eon.toString());

}

}

本例中要注重的重点是已经编写了一个用于测试的独立类,因此可以对这些文件进行过滤,以避免将这一代码嵌入到将要发布的文档中。另外,本例还为你希望在你的代码中测试的每个方法编写了一个专用测试方法,因此你将确切地知道需要对哪些方法进行测试、哪些方法工作正常以及哪些方法工作不正常。假如在编写实施文档之前已经编写了该测试,你就可以利用它来衡量工作的进展情况。

安装并运行JUnit

要运行此示例测试实例,必须首先下载并安装JUnit。JUnit的最新版本可以在JUnit的网站 www.junit.org免费下载。该软件包很小(约400KB),但其中包括了源代码和文档。要安装此程序,应首先对该软件包进行解压缩(junitxxx.zip)。它将创建一个目录(junitxxx),在此目录下有文档(在doc目录中)、框架的应用编程接口(API)文档(在javadoc目录中)、运行程序的库文件(junit.jar)以及示例测试实例(在junit目录中)。截至我撰写本文时,JUnit的最新版本为3.8.1,我是在此版本上对示例进行测试的。

图1 运行IsoDate测试

要运行此测试实例,将源文件(IsoDate.java和IsoDateTest.java)拷贝到Junit的安装目录下,打开终端,进入该目录,然后输入以下命令行(假如你正在使用UNIX):

eXPort CLASSPATH=.:./junit.jar

javac *.java

或者,假如你正在Windows,输入以下命令行

set CLASSPATH=.;junit.jar

javac *.java

这些命令行对CLASSPATH进行设置,使其包含当前目录中的类和junit.jar库,并编译Java源文件。

要在终端上运行该测试,输入以下命令行:

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有