类似地,系统测试中单独的方法可以用system组标识来标记,示范如下:
public class LoginTest {
private WebTester tester;
/**
* @testng.before-class = "true" groups="system"
*/
protected void init() throws Exception {
this.tester = new WebTester();
this.tester.getTestContext().
setBaseUrl("http://acme.com:8080/ppo/");
}
/**
* @testng.test groups="system"
*/
public void verifyView() {
this.tester.beginAt("/");
this.tester.setFormElement("isbn", "900930390");
this.tester.submit();
this.tester.assertTextPresent("Book in stock");
}
}
运行分类测试
将代码签入内容管理系统之前,通过构建或像IDE那样的环境进行本地测试是极为重要的。通过TestNG Eclipse插件运行分类测试非常简单。如图1所示,通过在TestNG Create, manage, and run configurations 对话框中选择组选项,可用组的列表将出现,它带有复选框,这使选择变得更轻松。选好所需的一个或多个组以后,单击Run按钮,然后就看着绿色进度条一直向前!
图1,TestNG的Eclipse集成
通过构建,运行分类TestNG 测试将转变成为各组定义恰当的 Ant 目标。例如,为了运行属于组件组的所有测试,用指定的component组定义TestNG Ant 任务。
<target name="testng-component"
depends="testng-init">
<mkdir dir="${testng.output.dir.comp}"/>
<testng groups="component"
outputDir="${testng.output.dir.comp}"
sourceDir="${testng.source.dir}"
classpath="${testclassesdir};${classesdir}">
<classfileset dir="${testng.source.dir}">
<include name="**/*Test.java"/>
</classfileset>
<classpath>
<path refid="build.classpath"/>
</classpath>
</testng>
因此,采用这一策略,至少可以创建4个目标。其中3个分别对应单元、组件和系统测试,最后一个目标则能运行所有这3种测试。
结束语
TestNG使测试分类变得相当容易,这很可能是TestNG的最激动人心的优点之一。此外,TestNG的group注释还有助于把测试放到其他分类中,如成批测试、验收测试,甚至是性能测试。事实上,这一特性似乎已对最新版本的JUnit产生了影响,JUnit也在规划支持测试组!
下一次,当您摸索着编写新的测试用例时,考虑一下它对构建执行次数的长期影响。构建的可伸缩性以一个以各种频率运行的测试分类策略开始,有效的测试分类则以TestNG开始。