分享
 
 
 

Eclipse 3.1中用注释单元测试框架(图)

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

这篇文章将为大家介绍TestNG这个新的测试框架的特性,以及TestNG优于Junit3.X的地方。

TestNG(Test Next Generation),顾名思义,下一代的测试框架。它是基于J2SE5.0的注释特性的而构建的轻量级的单元测试框架结构。说起单元测试框架,大家都会自然地联想到JUnit。用过JUnit3.X的程序开发人员,都会发现JUnit在提供了强大功能的同时,也存在很多令人沮丧的地方。其中一个问题就是,JUnit3.x 在每个测试方法调用前和调用后都会调用setUp()和tearDown()的方法。假如开发人员希望在不同的测试方法中重用同一个JDBC连接或者JNDI的Context的时候,会觉得很不方便。一般的解决这个问题的方法是使用静态方法,而这样的话,就必须小心并发控制的问题(多个线程访问共享的静态对象)。除此之外,JUnit 3.X对于多线程测试也比较麻烦,需要其他模块的支持。

这篇文章将为大家介绍TestNG这个新的测试框架的特性,以及TestNG优于Junit3.X的地方。众所周知,Eclipse不仅仅是功能强大的java IDE,同时也是一个开放的应用集成平台。而Eclipse3.1提供了对J2SE5.0的支持。因此,笔者将以Eclipse为运行环境,介绍Testng的安装,使用和运行。Eclipse3.1可以从http://www.eclipse.org/downloads/index.php下载。

关于注释

由于TestNG是基于J2SE5.0的注释特性所构建的。因此读者在阅读本文之前,必须了解注释的一些基本概念。关于J2SE的注释特性,笔者曾经在另一篇文章中具体的介绍过,具体介绍请参考"参考资料"。这里只简单的介绍一些概念。

注释是J2SE5.0所新提供的对于元数据的支持。程序开发人员可以在不改变原有逻辑的情况下,在源文件嵌入一些补充的信息。注释都是由@Interface annotationName 来声明的。注释可以用来修饰类定义,方法,域变量等等。使用的时候是在修饰的对象的定义前@annotationName。注释可以包含多个属性,使用的时候为属性赋值,例如 @annotationName(PRop1=value1,prop2=value2)。程序的开发人员还可以通过Java的反射特性,在运行时获得这些注释的信息。在后面的章节中,大家会看到TestNG是如何使用它所定义的注释类型的来实现测试框架的。

安装TestNG

在Eclipse中安装testNG很简单。和安装其他的plugin的方法相似。首先启动Eclipse3.1,在Help-Software Update-Find and Install, 在弹出的向导中,选择"Search New Features to Install", 点击"New Remote Site",如图1所示。在URL中输入 http://beust.com/eclipse,点击"OK"。如图2所示,点击"Finish",Eclipse会帮助你完成下面的安装。熟悉Eclipse的读者对这个过程一定不会觉得生疏。

图1 新建Update Site

图2 安装TestNG

点击查看大图

安装好TestNG后,在Eclipse中单击"Window"-Show View-Other-Java-TestNG, TestNG的视图就打开了。

图3 TestNG的视图

点击查看大图

注重:TestNG的视图的作用时为了现实测试结果。为了显示视图的功能,图3的视图是运行了一个测试用例后的结果。读者假如是第一次打开视图,应该是空白的。

一个简单的例子

TestNG和JUnit不同,他使用注释、正则表达式和基于xml的配置文件对测试方法进行配置的。我们先来看一个简单的例子。

1) 在Eclipse中创建一个Java的项目,com.catherine.lab.testng.demo

2) 在Packet EXPlorer中,右键点击刚生成的项目,选择Properties。

3) 在Properties属性框中,选择"Java Build Path",点击"Add External JARs…"

4) 在文件浏览的对话框中,选择{eclipse 3.1 home Directory}/plugins/com.beust.testng.eclipse_XXX/eclipse_testng.jar,以及 {eclipse 3.1 home directory}/plugins/com.beust.testng.eclipse_XXX/lib/testng-jdk14.jar/以及testng-jdk15.jar. 点击OK

5) 在Project中创建一个package: com.catherine.lab.testng.firstTest。在package里边创建一个类:FristTestSample.

清单1 TestNG的第一个例子

package com.catherine.lab.testng.firstTest;

import com.beust.testng.annotations.*;

public class FirstTestSample {

public FirstTestSample() {

super();

}

@Test

public void testPass() {

assert true :"This test should pass.";

}

@Test

public void testFail() {

assert false : "This test will fail";

}

@Configuration(beforeTestClass = true)

public void doBeforeTests() {

System.out.println("invoke before test class!");

}

@Configuration(afterTestClass = true)

public void doAfterTests() {

System.out.println("invoke after test class!");

}

}

6) 在Eclipse中打开Run-Run..,如图4所示。 首先在选择使用TestNG的Project,而后在选择编写了测试逻辑的Class,点击Run。测试结果就显示在TestNG的视图中了。如图5所示。

图4 配置运行TestNG的程序

点击查看大图

图5 TestNG的运行结果

点击查看大图

这是一个完整的测试用例。和JUnit不同,TestNG中实现测试逻辑的类不需要继续任何父类。测试方法也无需遵循testXXX的命名规则。

TestNG的类是大家所非常熟悉的普通的Java类,而在这个类中,所有的被@Test这个注释所修饰的方法都会被当作测试方法来运行。除了测试类之外,TestNG还需要了一个配置文件,用来配置测试过程。以下是一个简单的配置文件:testng.xml。

清单2 testNG的配置文件

<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd"

<suite name="My First TestNG test"

<test name="Hello Test!"

<classes

<class name=" com.catherine.lab.testng.firstTest.FirstTestSample " /

</classes

</test

</suite

testng.xml可以配置测试套件<suite,类似于JUnit的TestSuite。而<test类似于JUnit中的TestCase。所不同的是, TestNG中的测试套件可以包括多个测试用例,一个测试用例可以包括多个测试类,而一个测试类中可以定义多个测试方法。在下面的例子中,我们将看到这个配置文件更复杂的应用。

在图4的运行配置中,我们也可以设置一个xml文件作为配置文件,而不是直接使用测试类。其实我们使用测试类的时候,testNG也帮我们生成了一个缺省的xml文件。不相信的话,你可以切换到Resource Perspective,然后刷新Workspace,就会发现这个project里边生成了一个xml文件,而这个文件就是TestNG的缺省的配置文件。

现在我们再回到清单1,大家在上面的程序清单中会发现,除了使用@Test这个注释以外,我们还使用了@Configuration这个注释。下面我们就来介绍@Configuration这个注释的用途。

在注释Configuration中,定义了以下的属性:

清单3 configuration中的属性

public boolean beforeSuite() default false;

public boolean afterSuite() default false;

public boolean beforeTest() default false;

public boolean afterTest() default false;

public boolean beforeTestClass() default false;

public boolean afterTestClass() default false;

public boolean beforeTestMethod() default false;

public boolean afterTestMethod() default false;

beforeSuite=true,所修饰的方法将在测试套件(也就是配置文件中的Suite Tag)中任何一个方法调用之前,调用一次

afterSuite=true,所修饰的方法将在测试套件中所有方法都调用过后,调用一次

beforeTest=true,在测试用例(配置文件中Test Tag)中任何一个测试方法调用之前,调用一次

afterTest=true, 在测试用例中任何所有方法都调用之后,调用一次

beforeTestClass=true,在测试类中任何测试方法调用之前,调用一次

afterTestClass=true,在这个测试类中所有方法都调用过后,调用一次

beforeTestMethod=true,在每个测试方法调用之前,调用一次

afterTestMethod=true,在每个测试方法调用之后,调用一次

这个清单1中doBeforeTests()方法,在任何一个test方法调用之前被调用一次。doAfterTests,就是所有的test方法运行过了以后再调用一次。从Console输出的信息中,我们可以验证这一点:

图6 console输出的运行信息

点击查看大图

回页首

更复杂的例子

上一节中我们介绍了使用testNG的一个最简单的例子,这一节中我们将介绍一些关于testNG的高级应用。注释Test除了标志其修饰的方法为测试方法, 还提供了groups的属性。比如上面例子的两个方法testPass()和testFail(),我们可以给这两个方法加上group的属性。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有