七、再論TestSuite.suite()方法(Back to the TestCase.suite() Method)
現(xiàn)在我們對如何指定TestCase和TestSuite要運行的測試,已經(jīng)很清楚了,讓我們再回過頭來看看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;
}
好,你已經(jīng)了解了如何向TestRunner指定測試的不同方法,你應(yīng)該開始這些測試了。如果你在CalculatorTest中添加了一個suite方法,把它刪掉,因為在下一小節(jié)中TestRunner將運行CalculatorTest類中所有的testXxx方法。suite方法在你要做大量測試時非常重要。
八、運行測試(Running the Test)
輸入javac -classpath ~/packages/junit3.8.1/junit.jar *.java編譯CalculatorTest類。用你機(jī)器上junit.jar文件的路徑代替“~/packages/junit3.8.1/junit.jar”。輸入java -classpath ~/packages/junit3.8.1/junit.jar:. junit.textui.TestRunner CalculatorTest運行測試。這兒的junit.jar路徑也需要替換。為了避免每次都要在命令行指定classpath,把JUnit庫和當(dāng)前目錄都加到classpath中。Linux下你可以在bash shell中用這兩個命令:
CLASSPATH=~/packages/junit3.8.1/junit.jar:.
export CLASSPATH
注意把“~/packages/junit3.8.1/junit.jar”替換為junit.jar文件的正確路徑,而且不要忘了后面的冒號和點。Windows下設(shè)置環(huán)境變量的命令是"set",你可以用它把CLASSPATH設(shè)置為類似的值,除了正斜杠改成反斜杠。把“.”加入classpath是為了讓JUnit TestRunner能找到當(dāng)前目錄下的CalculatorTest。對本文來說,你應(yīng)該使用“.”而不是當(dāng)前路徑的硬編碼,因為你還要練習(xí)其它的例子,這樣無論你在做那個例子,你都訪問和執(zhí)行新的當(dāng)前目錄下的類。下面假定你已經(jīng)正確設(shè)置了你的classpath。
運行CalculatorTest中的測試后,你應(yīng)該看到下面的輸出:
...
Time: 0.008
OK (3 tests)
一串點表示JUnit正在運行,JUnit還在統(tǒng)計行顯示通過或失敗的測試數(shù)目。如果某個測試失敗了,顯示結(jié)果可能不是上面那樣,而是:
..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類和執(zhí)行方法(Different TestRunner Classes and Ways of Executing Them)
有好幾個TestRunner你可以使用:text、AWT和Swing。對應(yīng)的類分別是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等圖形環(huán)境中使用。它們用交互的圖形格式顯示運行結(jié)果。text UI是常用的,因為測試一般都用批處理模式運行,這時交互是一種缺點。
當(dāng)你調(diào)用TestRunner,把測試類的名字傳給它時,TestRunner加載你的類,使用reflection找到所有以“test”開始的方法。如果你不想在命令行用java調(diào)用TestRunner類,你還有另一重辦法:直接調(diào)用包含test suite的類的main方法。