Test Suite是Junit的最小测试执行单元。
1.用Junit构造Test Suite:Junit有内建机制去构造Test Suite,只要TestCase类符合以下原则:
a.测试方法必须是例程(instance)级别,不接收任何参数,返回void,即声明方法如下:
public void testMethodName()
b.测试方法方法必须以test(全部是小写)开头
缺省情况下,一个TestCase中的Test Suite不仅包括自己声明的test方法,还包括所有父类中声明的有效的test方法
2.收集指定的测试用例:
a.在TestCase类中创建一个suite()方法,必须声明为public static Test suite(),返回Test对象,无任何参数
b.在suite()方法体内创建一个TestSuite对象,将需要添加的测试对象加入到suite中:单个测试或其他的suite
public static Test suite() {
TestSuite suite= new TestSuite();
suite.addTest(new MoneyTest("testMoneyEquals"));
suite.addTest(new MoneyTest("testBagEquals"));
suite.addTest(new MoneyTest("testSimpleAdd"));
suite.addTest(new MoneyTest("testMixedSimpleAdd"));
suite.addTest(new MoneyTest("testBagSimpleAdd"));
suite.addTest(new MoneyTest("testSimpleBagAdd"));
suite.addTest(new MoneyTest("testBagBagAdd"));
return suite;
}
TestSuite suite= new TestSuite();
suite.addTest(new MoneyTest("testMoneyEquals"));
suite.addTest(new MoneyTest("testBagEquals"));
suite.addTest(new MoneyTest("testSimpleAdd"));
suite.addTest(new MoneyTest("testMixedSimpleAdd"));
suite.addTest(new MoneyTest("testBagSimpleAdd"));
suite.addTest(new MoneyTest("testSimpleBagAdd"));
suite.addTest(new MoneyTest("testBagBagAdd"));
return suite;
}
3.收集一个包所有的测试用例:和2中用法一样,区别是添加TestCase的suite方法到suite中,而不是添加单个测试,建议每个包下面都有一个AllTests类,按上面的规则收集该包下面的所有TestCase类,然后建立一个系统级别的AllTests类,包含各个包下面的AllTests,AllTests类可以不是TestCase的子类
public static Test suite() {
TestSuite suite= new TestSuite();
suite.addTestSuite(ATestCase.class);
suite.addTestSuite(ATestSuiteCase.suite());
TestSuite suite= new TestSuite();
suite.addTestSuite(ATestCase.class);
suite.addTestSuite(ATestSuiteCase.suite());
return suite;
}
}
4.搜集整个系统所有的测试:建立系统级别的AllTests,同3
5.扫描文件系统查找所有的测试用例:
a.使用GSBase(
http://gsbase.sourceforge.net/)的RecursiveTestSuite
b.使用JUnit-addons (
http://junit-addons.sourceforge.net)的junitx.util.DirectorySuiteBuilder
6.区分不同的测试类型(Programmer Test ,Customer Test ,End-To-End Test):
a.不同的测试类型建立不同的项目
b.同一项目建立不同的源代码测试分支:一般测试src/test,Cactus测试:src/testcactus
c.实现指定的接口标记:比如Customer Test 类均实现CustomerTest接口
7.控制某些测试的执行顺序:使用GSBase的OrderedTestSuite
a.在测试类中添加一个suite()方法
b.创建一个OrderedTestSuite,指定需要按序执行的测试列表,返回OrderedTestSuite
public static Test suite() {
String[] orderDependentTests = new String[] {
"testQueryWithNoAccounts",
"testInsert",
"testInsertAccountExists",
"testQueryWithOneAccount",
"testDelete"
};
return new OrderedTestSuite(
AccountDataStoreTest.class, orderDependentTests);
}
String[] orderDependentTests = new String[] {
"testQueryWithNoAccounts",
"testInsert",
"testInsertAccountExists",
"testQueryWithOneAccount",
"testDelete"
};
return new OrderedTestSuite(
AccountDataStoreTest.class, orderDependentTests);
}
8.构造数据驱动Test Suite:适合仅仅输入值和期望值不同,其他步骤均相同
a.构造一个testXXX()方法,做校验动作,输入值和期望值使用例程变量
b.创建个Constructor,参数为输入值和期望值,存到对应的例程变量
c.创建suite()方法,构造TestCase使用带参数的Constructor,添加到suite中
d.执行suite()方法
9.用xml文件定义test suite:将输入值和期望值以xml文件格式存放,在suite()方法中装载xml文件执行8中的方法,xml文件只是存放数据的一种形式,可选择其他存放形式,不适用与cactus