定义测试组 TestNG 另外一个有趣的特性是其定义测试组的才能。每个测试办法都可以与一个或多个组相关联,但可以选择只运行某个测试组。要把测试加入测试组,只需把组指定为 @Test 标注的参数,运用的语法如下: @Test(groups = {"tests.string"}) 在这个具体的例子中,您声明:标注的办法属于 tests.string 组。由于参数 groups 是一个数组,所以可以指定多个组,组名之间用逗号分隔。例如,在示例运用顺序中,您可以为 String、Number 以及 boolean 创立不同的测试,然后如清单 4 所示配置 TestNG, 有选择地运行它们.
清单 4. 带有不同组的配置文件!DOCTYPE suite SYSTEM "beust/testng/testng-1.0.dtd" suite name="My suite"test name="Simple example"groupsruninclude name="tests.string" /include name="tests.math" /exclude name="tests.boolean"//run/groupsclasses.... list classes here..../classes/test/suite 显然,当运行不同的测试组时,HTML 报告能够在单一列表中显示所有测试,也可以在独立的列表中显示每个组的测试,从而能够立刻理解成绩的来源。
配置办法 运用 TestNG,不只可以指定测试办法,还可以用专门的标注 @Configuration 指定类中的其他特定办法,这些办法叫做 配置办法。配置办法有四品种型:
beforeTestClass 办法在类实例化之后,但是在测试办法运行之前执行。 afterTestClass 办法在类中的所有测试办法执行之后执行。 beforeTestMethod 办法在类中的任何测试办法执行之前执行。 afterTestMethod 办法在类中的每个测试办法执行之后执行。 图 2 进一步描绘了测试类的生命周期。
图 2. 测试类的生命周期
清单 5 演示了配置办法的一些示例。请注意,如果您运用组,那么配置办法也必须属于某个组。而且,配置办法的四品种型彼此之间不是互斥的,所以可以把办法定义成同时属于一种或多种配置办法类型。(作为例子,请参阅清单 5 中的 aroundTestMethods() 办法)。
honeygirl美鞋城
清单 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 时最分明的是,这个模板曾经是编写单元测试的一个好选择了,而且,在设计上,它与其他库和工具的集成十分复杂,所以它未来的开展会给开发人员带来一些有趣的新东西。