要寫一個TestSuite更加簡單,看一下下面的代碼就明白了:
import junit.framework.Test;
import junit.framework.TestSuite;
public class AllTests {
public static Test suite() {
TestSuite suite = new TestSuite("Test for democenter");
//$JUnit-BEGIN$
suite.addTest(TestTeacherAction.suite());
suite.addTest(TestHibernateDAO.suite());
//$JUnit-END$
return suite;
}
}
當運行這個TestSuite的時候,就會自動對這兩個TestCase進行測試。你可能已經看出來了,我們前文中寫的TestTeacherAction類中並沒有聲明suite方法,是的,因此這裏就要增加這個靜態方法,如下所示:
return new TestSuite(TestTeacherAction.class);
}
我們在這個方法裏只是簡單的返回一個TestSuite對象,JUnit會根據傳遞的參數(TestTeacherAction.class)找到這個TestCase中全部的testXXX()方法並運行。
上面這種suite()方法的寫法被稱爲動態方式,即利用了java的反射機制。還可以寫成靜態方式,這就需要在TestCase裏寫兩個方法了,如下:
TestSuite suite=new TestSuite();
suite.addTest(new TestTeacherAction());
return suite;
}
protected void runTest() throws Throwable {
testListTeacherAction();
testEditTeacherAction();
testSaveTeacherAction();
}
這種方式允許用戶選擇執行某些testXXX()方法,而且這些方法也不一定以test開頭,反正只要在runTest()裏指定的都給執行。而suite()方法與動態方式比也有變化。要注意的是,如果按動態方式寫suite()就不要再覆蓋runTest()方法了,我實驗後發現,這樣會造成runTest()中指定的方法被反覆執行n次,其中n等於textXXX()方法的數目。
另外一點,關於JUnite對Test的計數,在動態方式下,JUnit是按照testXXX()的數目計數的;而在靜態方式下,是按照TestCase的數目計數的。
還有一點很重要,動態方式下,setUp()和tearDown()這兩個方法是在每個testXXX()方法的前後執行;而靜態方式下,是在每個TestCase的前後執行,也就是說,同一個TestCase中兩個測試方法之間可能不會經過tearDown()和setUp()的過程。
至於動態方式和靜態方式的選擇,可以根據上面所說的進行參考。不過先聲明,以上都是我自己測試得到的結論,存在出現錯誤的可能性(歡迎告知),以及沒有涉及到的方面。
我本人比較prefer動態方式,畢竟代碼量小一些