七、再论TestSuite.suite()方法(Back to the TestCase.suite() Method)
现在我们对如何指定TestCase和TestSuite要运行的测试,已经很清楚了,让我们再回过头来看看TestRunner需要的TestCase.suite()方法。这儿有一个TestCase.suite()方法的例子,它添加一个TestCase类的一个测试方法,另一个TestCase类的所有测试方法,以及一个子TestSuite所有层次的测试方法。
程序列表4 (a suite method demonstrating many different ways of specifying tests):
public static suite() {
TestSuite globalTestSuite = new TestSuite();
TestCase addToCartTestCase = new ShopCartTest("testAddToCart");
globalTestSuite.addTest(addToCartTestCase);
TestCase checkOutTestCase = new ShopCartTest("testCheckOut");
globalTestSuite.addTest(checkOutTestCase);
TestSuite calcTestSuite = new TestSuite(CalculatorTest.class);
globalTestSuite.addTest(calcTestSuite);
TestSuite fileModuleTestSuite = new TestSuite();
fileModuleTestSuite.addTest(new ImportExportTest("testImport"));
fileModuleTestSuite.addTest(new TestSuite(SaveFileTest.class));
globalTestSuite.addTest(fileModuleTestSuite);
return globalTestSuite;
}
好,你已经了解了如何向TestRunner指定测试的不同方法,你应该开始这些测试了。如果你在CalculatorTest中添加了一个suite方法,把它删掉,因为在下一小节中TestRunner将运行CalculatorTest类中所有的testXxx方法。suite方法在你要做大量测试时非常重要。
八、运行测试(Running the Test)
输入javac -classpath ~/packages/junit3.8.1/junit.jar *.java编译CalculatorTest类。用你机器上junit.jar文件的路径代替“~/packages/junit3.8.1/junit.jar”。输入java -classpath ~/packages/junit3.8.1/junit.jar:. junit.textui.TestRunner CalculatorTest运行测试。这儿的junit.jar路径也需要替换。为了避免每次都要在命令行指定classpath,把JUnit库和当前目录都加到classpath中。Linux下你可以在bash shell中用这两个命令:
CLASSPATH=~/packages/junit3.8.1/junit.jar:.
export CLASSPATH
注意把“~/packages/junit3.8.1/junit.jar”替换为junit.jar文件的正确路径,而且不要忘了后面的冒号和点。Windows下设置环境变量的命令是"set",你可以用它把CLASSPATH设置为类似的值,除了正斜杠改成反斜杠。把“.”加入classpath是为了让JUnit TestRunner能找到当前目录下的CalculatorTest。对本文来说,你应该使用“.”而不是当前路径的硬编码,因为你还要练习其它的例子,这样无论你在做那个例子,你都访问和执行新的当前目录下的类。下面假定你已经正确设置了你的classpath。
运行CalculatorTest中的测试后,你应该看到下面的输出:
...
Time: 0.008
OK (3 tests)
一串点表示JUnit正在运行,JUnit还在统计行显示通过或失败的测试数目。如果某个测试失败了,显示结果可能不是上面那样,而是:
..F
Time: 0.01
There was 1 failure:
1) testAddition(Test) "expected:<5> but was:<4>"
FAILURES!!!
Tests run: 2, Failures: 1, Errors: 0
九、其它TestRunner类和执行方法(Different TestRunner Classes and Ways of Executing Them)
有好几个TestRunner你可以使用:text、AWT和Swing。对应的类分别是junit.textui.TestRunner、junit.awtui.TestRunner和junit.swingui.TestRunner。运行它们的命令类似:
java junit.awtui.TestRunner CalculatorTest
--或者--
java junit.swingui.TestRunner CalculatorTest
AWT和Swing版本的TestRunner需要在Windows、OS X或X11等图形环境中使用。它们用交互的图形格式显示运行结果。text UI是常用的,因为测试一般都用批处理模式运行,这时交互是一种缺点。
当你调用TestRunner,把测试类的名字传给它时,TestRunner加载你的类,使用reflection找到所有以“test”开始的方法。如果你不想在命令行用java调用TestRunner类,你还有另一重办法:直接调用包含test suite的类的main方法。