异常检测
使用 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?了解这个术语的意义。
请访问 Developer Bookstore,获得技术书籍的完整列表,其中包括数百本 Java 相关主题 的图书。