[测试]将TestCase整合
在上一篇貼子里,我簡單介紹了如何寫一個TestCase(MockStrutsTestCase是TestCase的一個子類),可以看到是十分簡單的,基本上只要寫一些testXXX方法就可以運行了。當我們選擇運行這個TestCase的時候,實際上運行的是一個Test,Test是TestCase的接口,實現這個接口的還有TestSuite類,使用這個類可以把多個TestCase一起運行,從而更加自動化。
要寫一個TestSuite更加簡單,看一下下面的代碼就明白了:
package?edu.pku.cc.democenter.test;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方法,是的,因此這里就要增加這個靜態方法,如下所示:
public?static?Test?suite()?{????return?new?TestSuite(TestTeacherAction.class);
}
我們在這個方法里只是簡單的返回一個TestSuite對象,JUnit會根據傳遞的參數(TestTeacherAction.class)找到這個TestCase中全部的testXXX()方法并運行。
上面這種suite()方法的寫法被稱為動態方式,即利用了java的反射機制。還可以寫成靜態方式,這就需要在TestCase里寫兩個方法了,如下:
public?static?Test?suite()?{????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動態方式,畢竟代碼量小一些
本文轉自博客園八進制的博客,原文鏈接:[測試]將TestCase整合,如需轉載請自行聯系原博主。
總結
以上是生活随笔為你收集整理的[测试]将TestCase整合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 金融安全资讯精选 2017年第十六期:逐
- 下一篇: java项目实现流水号自动增长