首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室软件测试频道
Google
首页 资讯动态 测试技术 测试工具 行业软件测试 测试管理 测试下载 经验分享 软件质量 其他技术 RSS订阅 博客 论坛
您现在的位置: 中国IT实验室 >> 软件测试 >> 测试技术 >> 正文

TestNG使Java单元测试轻而易举

    定义测试组

    TestNG 另外一个有趣的特性是其定义测试组的能力。每个测试方法都可以与一个或多个组相关联,但可以选择只运行某个测试组。要把测试加入测试组,只要把组指定为 @Test 标注的参数,使用的语法如下:

    @Test(groups = {"tests.string"})

    在这个具体的例子中,您声明:标注的方法属于 tests.string 组。因为参数 groups 是一个数组,所以可以指定多个组,组名之间用逗号分隔。例如,在示例应用程序中,您可以为 String、Number 以及 boolean 创建不同的测试,然后如清单 4 所示配置 TestNG, 有选择地运行它们。

    清单 4. 带有不同组的配置文件

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

<suite name="My suite">

<test name="Simple example">

<groups>

<run>

<include name="tests.string" />

<include name="tests.math" />

<exclude name="tests.boolean"/>

</run>

</groups>

<classes>

.... list classes here....

</classes>

</test>

</suite>

显然,当运行不同的测试组时,HTML 报告能够在单一列表中显示所有测试,也可以在独立的列表中显示每个组的测试,从而能够立即理解问题的来源。

配置方法

使用 TestNG,不仅可以指定测试方法,还可以用专门的标注 @Configuration 指定类中的其他特定方法,这些方法叫做 配置方法。配置方法有四种类型:

beforeTestClass 方法在类实例化之后,但是在测试方法运行之前执行。

afterTestClass 方法在类中的所有测试方法执行之后执行。

beforeTestMethod 方法在类中的任何测试方法执行之前执行。

afterTestMethod 方法在类中的每个测试方法执行之后执行。

    图 2 进一步描述了测试类的生命周期。

    图 2. 测试类的生命周期

    清单 5 演示了配置方法的一些示例。请注意,如果您使用组,那么配置方法也必须属于某个组。而且,配置方法的四种类型彼此之间不是互斥的,所以可以把方法定义成同时属于一种或多种配置方法类型。(作为例子,请参阅清单 5 中的 aroundTestMethods() 方法)。

    清单 5. 配置方法示例

@Configuration(beforeTestClass = true, groups = {"tests.workflow"})

public void setUp()

{

System.out.println("Initializing...");

}

@Configuration(afterTestMethod = true, beforeTestMethod = true, groups = {"tests.workflow"})

public void aroundTestMethods()

{

System.out.println("Around Test");

}

    TestNG 中的配置方法是 JUnit 的 setUp() 和 tearDown() 方法的增强版;它们的主要目的是为测试创建正确的执行上下文,并在测试用例执行之后刷新数据。

    异常检测

    使用 TestNG,您可以非常简单、非常容易地检测异常的发生。很明显,用 JUnit 也可以做这件事,但是正如您在清单 6 中的示例中所看到的,使用 TestNG 的 @ExpectedExceptions 标注可以使代码编写惊人地容易和简单。@ExpectedExceptions 标注指明框架能够容忍抛出的 NumberFormatException 异常,所以不应当被当作是故障。要查看在某行代码中是否抛出异常,您可以直接在这行代码之后加入 assert false 语句。这意味着 只有 在指定行中抛出特定类型的异常的时候,您才会通过测试。

清单 6. 用 TestNG 进行异常检测

public class NumberUtilsTest

{

@Test(groups = {"tests.math"})

@ExpectedExceptions(NumberFormatException.class)

public void test()

{

NumberUtils.createDouble("12.23.45");

assert false; //shouldn't be invoked

}

}

    结束语

    在本文中,我提供了 TestNG 的快速实用介绍,目的是展示如何开始编写单元测试。但是,它不是一份完整的参考手册。TestNG 还有许多其他非常有用的有趣特性:

    可以向测试方法和配置方法传递参数,可以用标注或在 XML 配置文件中声明参数。

    可以在 TestNG 下用“兼容模式”运行过去运行良好的 Junit 测试。

    可以在测试组之间建立依赖性,决定它们的执行顺序。

    要了解这个框架的所有潜力,有必要参阅 TestNG 的文档(参阅 参考资料)。

    所有这些特性,与用于定义测试的 Java 标注一起,使整个测试过程更加简单、更加灵活。编写测试必须遵守的规则 很少;除此之外,您绝对可以自由选择自己喜欢的测试策略。

    在使用 TestNG 时最明显的是,这个模板已经是编写单元测试的一个好选择了,而且,在设计上,它与其他库和工具的集成非常简单,所以它未来的发展会给开发人员带来一些有趣的新东西。

    参考资料

    您可以参阅本文在 developerWorks 全球站点上的 英文原文。

    请单本文顶部或底部的 Code 图标下载 j-testng-sample.zip,其中包含本文中讨论的代码。

    在项目的 Web 站点 下载 TestNG.

    运行本文的代码,需要下载 Jakarta Commons Lang 库。

    如果不熟悉 Java 标注,请阅读 Brett McLaughlin 2004 年 9 月份开始在 developerWorks 上发表的由两部分组成的系列文章:

    Tiger 中的注释,第 1 部分: 向 Java 代码中添加元数据

    Tiger 中的注释,第 2 部分: 定制注释

    在 JUnit.org 下载 JUnit.

    Malcolm Davis 撰写的“利用 Ant 和 JUnit 进行增量开发”(developerWorks,2000 年 11 月)是一篇很好的文章,解释了如何把 JUnit 集成到项目中。

    Eric Allen 和 Roy Miller 在他们各自的专栏 诊断 Java 代码 和 极限编程 中都经常提及到单元测试。

    Testdriven.com 是关于测试驱动开发的文章和资源的全面集合。

    学习更多关于各种 开源测试工具。

    学习更多关于“使用模仿对象进行单元测试”,Alexander Day Chaffee 和 William Pietri (developerWorks,2002 年 11 月)。

    关于 JUnit、单元测试和 TestNG 的大量思想都记录在 Cedric Beust's blog.

    您是否 test infected?了解这个术语的意义。

上一页  [1] [2] 

【责编:Chuan】

中国IT教育

相关文章
对 Java 和 EJB 应用程序进行单元测试…
用Robot写Java代理
loadrunner调用java的类
JAVA和.NET两个平台对于安全功能的比较
Java程序性能测试
java的单元自动化测试---jtest
JAVA测试模式
10款常用的JAVA测试工具
JAVA内存泄漏原因和内存泄漏检测工具
对Java 和EJB 应用程序进行单元测试(二)…
编辑推荐
· [经验分享]写好MRD的10种技巧
· [其它]解析StressMark压力测试工具
· [测试资讯]大学生求职集体“跳水”  可能会遗憾终身…
· [性能测试]利用TPTP对Java程序进行性能测试
· [其它]一款开源的性能测试工具:认识p-unit
· [性能测试]Apache JMeter web性能测试实例…
· [其它]StressMark压力测试工具
· [性能测试]使用JMeter 完成常用的压力测试…
· [BUG缺陷管理]巧破软件测试缺陷管理之痛
· [BUG缺陷管理]加强运行分析 提高管理水平…
相关产品和培训
文章评论
 专题推荐

 ·建立可全面监控Squid代理服务器
 ·华为认证题库、模拟器下载专题
 ·嵌入式操作系统Linux资料下载(A)
 ·JAVA的应用编程接口——JAVA API详解…
 ·Linux Shell学习技术专题[上]…
 ·windows Server 2008专区…
 ·WEB开发ASP.NET和PHP、JSP究竟学哪个
 ·五步带你入门XML
 ·零距离接触OCP_Oracle认证体系全攻略
 ·揭秘:网络工程师职业发展路线图
 最近更新
 开发人员需要了解的测试
 经验分享测试员眼中的测试理论
 策划人员如何产生游戏测试解决方案
 软件测试自动化测试工具的评测方法
 项目级和企业级的自动化测试
 基于UNIX的操作系统的自动化测试工…
 高速数字系统的串音控制技术分析
 让Web站点崩溃最常见的七大原因
 LoadRunner中HTTP协议的录制及模式
 如何提高软件测试水平
 博客论点
 频道精选
 大多数软件测试员应具备的素质
 认识软件测试中的手机软件系统测试
 IT新锐职业调查显示:软件测试成为职场热…
 如何成为最有价值的“测试精英”
 软件测试中服务器稳定性测试方法
 软件测试缺乏配置管理的问题解决方法
 自动化测试脚本运行控制方法研究
 漫谈软件测试工程师的角色定位
 一个软件测试工程师的工作心得
 软件测试工具QTP识别对象的原理
 掌握Cisco IOS测试命令的多种用法…
 没有用户的可用性测试如何操作?
 教你JSP和Servlet的优化性能的方法
 面向对象方法与软件复用关系
 软件测试频道导航
测试资讯
测试技术

功能测试 | 自动化测试 | 单元测试 |
性能测试 | 安全测试 | Web测试 |
嵌入式测试 | BUG分析与管理 | 回归测试 |
集成测试 | 白盒黑盒测试 | 可靠性测试 |
可用性测试 | 其它相关技术 |
测试工具
Mercury | Rational | LoadRunner |
QTP | Robot | SilkPerformer |
TestDirector | WinRunner | 其它工具 |
测试管理
缺陷管理 | 测试流程管理 | 测试项目管理 |
其它管理 |
软件质量
行业软件测试
手机测试 | 通信设备测试 | 数据库应用测试
测试下载
经验分享