您现在的位置: 中国IT实验室 >> 软件测试 >> 测试技术 >> 文章正文
TestNG使Java单元测试轻而易举
来源:中国IT实验室整理 时间:2007-4-29 作者:佚名

    关于代码

    为了演示 TestNG 的用法,我要为叫做 Jakarta Common Lang 的这个广泛应用的开源库(其中包含一些处理和操纵字符串、数字和 Java 对象的有用的类)编写一些单元测试。在下面的 参考资料 一节中,您可以找到 TestNG 和 Jakarta Common Lang 库的链接;如果您想在自己的机器上随着本文一起练习,这二者都需要下载。

    可以在两个不同的包中得到 TestNG:一个包要求 JDK 5.0,另一个包与 Java 语言 1.4 版本兼容。定义测试的时候,它们使用的语法略有差异:前者使用 JDK 5.0 标注,后者使用旧的 Javadoc 风格的标注。本文使用的是 JDK 5.0 版本,所以在继续阅读本文之前,需要对标注有基本的了解;您可以在 参考资料 中找到关于这个主题的 developerWorks 资源的链接。但是,您要知道 只有在编译和运行测试的时候 才需要 JDK 5.0,所以您仍然可以用自己喜欢的编译器来构建应用程序。实际上,您将用从 Jakarata 项目的 Web 站点下载的相同 JAR 文件来测试 Jakarta Common Lang 库。关于使用 Java 平台 1.4 版本的 TestNG 的更多细节,可以在 TestNG 的 Web 站点上找到。

    最后,请单击本文顶部或底部的 Code 图标,下载 j-testng-sample.zip 文件,其中包含一些示例,演示了如何用 TestNG 为 Jakarta Commons Lang 编写单元测试。在里面,可以找到这里给出的大多数代码,还有其他一些示例。阅读本文并不需要这些代码,但是它可以帮助您更加深入地理解在这里介绍的概念。

    TestNG 快速起步

    TestNG 的测试类是普通的老式 Java 对象;您不需要扩展任何特殊的类,也不需要使用测试方法的任何命名约定:您只要用标注 @Test 通知框架这个类的方法是测试。清单 1 演示了实用类 StringUtils 的一个最简单的测试。它测试 StringUtils 的两个方法: isEmpty() 方法检测 String 是否为空; trim() 方法从 String 两端删除控制字符。请注意,其中使用了 Java 指令 assert 来检测错误情况。

清单 1. 针对类 StringUtils 的一个测试用例

package tests;

import com.beust.testng.annotations.*;

import org.apache.commons.lang.StringUtils;

public class StringUtilsTest

{

@Test

public void isEmpty()

{

assert StringUtils.isBlank(null);

assert StringUtils.isBlank("");

}

@Test

public void trim()

{

assert "foo".equals(StringUtils.trim(" foo "));

}

}

但是,在运行测试之前,必须用特殊的 XML 文件配置 TestNG,习惯上把这个文件命名为 testng.xml。这个文件的语法非常简单,如清单 2 所示。这个文件首先定义测试套件 My test suite,这个套件只包含一个测试 First test,这个测试由 StringUtilsTest 类完成。

清单 2. TestNG 的配置文件

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

<suite name="My test suite">

<test name="First test">

<classes>

<class name="tests.StringUtilsTest" />

</classes>

</test>

</suite>

    如果这个示例 testng.xml 文件看起来没什么用处(只有一个测试类),那么好消息是:这实际上是您定义测试套件时 惟一需要编写的文件。还记得 JUnit 过去的日子么?在那些日子里,套件的定义可能分布在多个文件中:JUnit 的 TestSuite 文件,属性文件,还有当然缺不了的 Ant 构建文件。使用 TestNG,所有必需的数据都集中在 testng.xml 文件中。不需要额外的 TestSuite 文件和构建文件。

    要运行测试,请用 javac 编译类,然后用以下命令调用 TestNG :

    java -ea -classpath .;testng.jar;commons-lang-2.0.jar com.beust.testng.TestNG testng.xml

    在这里,选项 -ea 告诉 JVM 处理断言(在断言失败时抛出异常);运行这个例子只需要 testng.jar 和 commons-lang-2.0.jar 这两个库,而 com.beust.testng.TestNG 是 TestNG 的主类。对于所有那些已经非常高兴地忘记了 java 和 javac 的神秘语法的开发人员来说,还提供了一个有用的 Ant 任务。作为例子,清单 3 演示了本文发布的示例应用程序的 Ant 构建文件。请注意与类 com.beust.testng.TestNGAntTask 关联的 testng 任务的定义,以及它在 test 目标中相当简单的用法。

    清单 3. 带有 TestNG 任务的 Ant 构建文件

<project name="sample" default="test" basedir=".">

<!-- COMPILE TESTS-->

<path id="cpath">

<pathelement location="testng.jar"/>

<pathelement location="commons-lang-2.0.jar"/>

</path>

<target name="compile">

<echo message="compiling tests"/>

<mkdir dir="classes"/>

<javac debug="true"

source="1.5" classpathref="http://www.chinaitpower.com/A200507/2005-07-24/cpathsrcdir="src" destdir="classes"/>

</target>

<!-- RUN TESTS-->

<taskdef name="testng"

classname="com.beust.testng.TestNGAntTask"

classpathref="http://www.chinaitpower.com/A200507/2005-07-24/cpath/><path id="runpath">

<path refid="cpath"/>

<pathelement location="classes"/>

</path>

<target name="test" depends="compile">

<echo message="running tests"/>

<testng fork="yes" classpathref="http://www.chinaitpower.com/A200507/2005-07-24/runpath outputDir=test-output><fileset dir="src" includes="testng.xml"/>

<jvmarg value="-ea" />

</testng>

</target>

</project>

    如果一切正常,那么应当在控制台中看到测试结果。而且,TestNG 还在当前目录下自动创建了一个叫做 test-output 的文件夹,并在其中创建了一份非常好的 HTML 报告。如果打开该报告并装入 index.html,就可以看到与图 1 中的页面类似的页面。

    图 1. TestNG 创建的 HTML 报告

[1] [2] 下一页  



相关文章
C语言单元测试框架-Check
自动进行团队构建和单元测试过程
java的单元自动化测试---jtest
使用NUnit在.Net编程中进行单元测试
防御性编码和单元测试“交通规则”
数据库程序的单元测试
单元测试的基本方法
为什么要进行单元测试?
单元测试和事先测试开发
单元测试------理论篇
推荐文章


测试技术 测试工具 测试管理 测试质量
·TestNG使Java单元测试轻而易举04-29
·C语言单元测试框架-Check04-29
·自动进行团队构建和单元测试过程04-29
·java的单元自动化测试---jtest04-29
·使用NUnit在.Net编程中进行单元测试04-29
·防御性编码和单元测试“交通规则”04-29
·数据库程序的单元测试04-29
·单元测试的基本方法04-29
·为什么要进行单元测试?04-28
·单元测试和事先测试开发04-28
·单元测试------理论篇04-28
·强大的Web开源测试工具—Selenium04-19
·测试工具:Pure Software vs Appliance04-12
·开源Web自动化测试框架——Watir试用手记04-12
·Java开源测试工具汇总04-12
·开源测试工具的完整解决方案04-12
·Logiscope测试机理04-12
·测试工具的选择04-12
·testview测试工具详介04-12
·用webload进行web application性能测试04-12
·Optimizeit Thread Debugger概览04-12
·开放源代码的软件测试工具04-12
·从CMM角度考虑需求管理计划04-17
·软件测试实践之测试环境的规划与管理04-12
·缺陷漏测分析:测试过程改进04-12
·软件测试的组织与管理04-12
·T-Plan 测试过程管理工具技术摘要04-12
·软件测试过程的监控方法04-12
·成功测试管理的九大原则04-12
·谈项目管理和软件测试过程04-12
·如何制定软件项目测试计划04-12
·软件测试需要一个怎样的过程?04-12
·软件测试应遵循的八条原则04-12
·CMMI混合型表达方式04-18
·以技术采用工具推进CMMI实施04-18
·CMMI-2级必需的和期望的模型要素04-18
·CMM/CMMI/SPCA业务介绍04-18
·过程“奥林匹克”——CMM的目的04-17
·软件市场的通行证——CMM04-17
·软件企业如何有效地推行CMM04-17
·CMM是解决软件出口壁垒的有效途径04-17
·CMM培训需要特别注意两大问题04-17
·源自美国的安全模型SSE-CMM04-17
·CMM软件过程改进—软件企业的BPR04-17
  培训中心
  ITLab技术交流平台: