將TestCase整合

 我簡單介紹瞭如何寫一個TestCase(MockStrutsTestCase是TestCase的一個子類),可以看到是十分簡單的,基本上只要寫一些testXXX方法就可以運行了。當我們選擇運行這個TestCase的時候,實際上運行的是一個Test,Test是TestCase的接口,實現這個接口的還有TestSuite類,使用這個類可以把多個TestCase一起運行,從而更加自動化。

要寫一個TestSuite更加簡單,看一下下面的代碼就明白了:

None.gifpackage edu.pku.cc.democenter.test;
None.gif
None.gifimport junit.framework.Test;
None.gifimport junit.framework.TestSuite;
None.gif
None.gifpublic class AllTests {
None.gif
None.gif    public static Test suite() {
None.gif        TestSuite suite 
= new TestSuite("Test for democenter");
None.gif        
//$JUnit-BEGIN$
None.gif
        suite.addTest(TestTeacherAction.suite());
None.gif        suite.addTest(TestHibernateDAO.suite());
None.gif        
//$JUnit-END$
None.gif
        return suite;
None.gif    }
None.gif}
None.gif

當運行這個TestSuite的時候,就會自動對這兩個TestCase進行測試。你可能已經看出來了,我們前文中寫的TestTeacherAction類中並沒有聲明suite方法,是的,因此這裏就要增加這個靜態方法,如下所示:

None.gifpublic static Test suite() {
None.gif    
return new TestSuite(TestTeacherAction.class);
None.gif}
None.gif

我們在這個方法裏只是簡單的返回一個TestSuite對象,JUnit會根據傳遞的參數(TestTeacherAction.class)找到這個TestCase中全部的testXXX()方法並運行。

上面這種suite()方法的寫法被稱爲動態方式,即利用了java的反射機制。還可以寫成靜態方式,這就需要在TestCase裏寫兩個方法了,如下:

None.gifpublic static Test suite() {
None.gif    TestSuite suite
=new TestSuite();
None.gif    suite.addTest(
new TestTeacherAction());
None.gif    
return suite;    
None.gif}
None.gif
None.gifprotected 
void runTest() throws Throwable {
None.gif    testListTeacherAction();
None.gif    testEditTeacherAction();
None.gif    testSaveTeacherAction();
None.gif}
None.gif

這種方式允許用戶選擇執行某些testXXX()方法,而且這些方法也不一定以test開頭,反正只要在runTest()裏指定的都給執行。而suite()方法與動態方式比也有變化。要注意的是,如果按動態方式寫suite()就不要再覆蓋runTest()方法了,我實驗後發現,這樣會造成runTest()中指定的方法被反覆執行n次,其中n等於textXXX()方法的數目。

另外一點,關於JUnite對Test的計數,在動態方式下,JUnit是按照testXXX()的數目計數的;而在靜態方式下,是按照TestCase的數目計數的。

還有一點很重要,動態方式下,setUp()和tearDown()這兩個方法是在每個testXXX()方法的前後執行;而靜態方式下,是在每個TestCase的前後執行,也就是說,同一個TestCase中兩個測試方法之間可能不會經過tearDown()和setUp()的過程。

至於動態方式和靜態方式的選擇,可以根據上面所說的進行參考。不過先聲明,以上都是我自己測試得到的結論,存在出現錯誤的可能性(歡迎告知),以及沒有涉及到的方面。

我本人比較prefer動態方式,畢竟代碼量小一些

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章