网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  eclipse 3.1中用注释单元测试框架(图)     
  文章作者:未知  文章来源:水木森林  
  查看:81次  录入:管理员--2007-11-17  
 
  这篇文章将为大家介绍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
  
 eclipse 3.1中用注释单元测试框架(图)(图一)

  图2 安装testng
  
 eclipse 3.1中用注释单元测试框架(图)(图二)
点击查看大图

  安装好testng后,在eclipse中单击"window"->show view->other->java->testng, testng的视图就打开了。
  
  图3 testng的视图
  
 eclipse 3.1中用注释单元测试框架(图)(图三)
点击查看大图

  注意: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的程序
  
 eclipse 3.1中用注释单元测试框架(图)(图四)
点击查看大图

  图5 testng的运行结果
  
 eclipse 3.1中用注释单元测试框架(图)(图五)
点击查看大图

  这是一个完整的测试用例。和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输出的运行信息
  
eclipse 3.1中用注释单元测试框架(图)(图六)
点击查看大图

  回页首
  
  更复杂的例子
  
  上一节中我们介绍了使用testng的一个最简单的例子,这一节中我们将介绍一些关于testng的高级应用。注释test除了标志其修饰的方法为测试方法, 还提供了groups的属性。比如上面例子的两个方法testpass()和testfail(),我们可以给这两个方法加上group的属性。
 
 
上一篇: 发布您的最新基于eclipse的产品一(图)    下一篇: 在eclipse 3.1体验j2se 5.0新特性八(图)
  相关文档
精通ejb【二】 11-17
快报:microsoft visual j# .net beta 1 正式出街,可以downloa 11-16
学习自定义smtpappender中的源码 11-17
[java100例]052、使用odbc连接数据库 11-17
基础篇:数组 11-17
学习DisplayTag想到的学习方法 03-25
classpath详解(谨献给那些找不到北的朋友) 11-17
在oracle快速进行数据行存在性检查 11-17
java 理论与实践: 非阻塞算法简介 11-17
struts中用动态选择的元素创建复选框 11-16
给你的java应用程序加上日志功能 11-17
使用displaytag使列名显示中文的方法 11-17
浅析java多线程程序设计机制 11-16
tomcat配置技巧精华详解分析 11-17
java1.5中新的静态导入特性 11-17
用java读写ini配置文件 11-17
开发不再是苦差事 用Eclipse简化开发 03-25
java继续革命 11-17
struts实现文件下载中文乱码解决方案 11-17
ibatis框架batch处理优化 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息