[测试]将TestCase整合
在上一篇貼子里,我簡(jiǎn)單介紹了如何寫一個(gè)TestCase(MockStrutsTestCase是TestCase的一個(gè)子類),可以看到是十分簡(jiǎn)單的,基本上只要寫一些testXXX方法就可以運(yùn)行了。當(dāng)我們選擇運(yùn)行這個(gè)TestCase的時(shí)候,實(shí)際上運(yùn)行的是一個(gè)Test,Test是TestCase的接口,實(shí)現(xiàn)這個(gè)接口的還有TestSuite類,使用這個(gè)類可以把多個(gè)TestCase一起運(yùn)行,從而更加自動(dòng)化。
要寫一個(gè)TestSuite更加簡(jiǎn)單,看一下下面的代碼就明白了:
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;
????}
}
當(dāng)運(yùn)行這個(gè)TestSuite的時(shí)候,就會(huì)自動(dòng)對(duì)這兩個(gè)TestCase進(jìn)行測(cè)試。你可能已經(jīng)看出來了,我們前文中寫的TestTeacherAction類中并沒有聲明suite方法,是的,因此這里就要增加這個(gè)靜態(tài)方法,如下所示:
public?static?Test?suite()?{????return?new?TestSuite(TestTeacherAction.class);
}
我們?cè)谶@個(gè)方法里只是簡(jiǎn)單的返回一個(gè)TestSuite對(duì)象,JUnit會(huì)根據(jù)傳遞的參數(shù)(TestTeacherAction.class)找到這個(gè)TestCase中全部的testXXX()方法并運(yùn)行。
上面這種suite()方法的寫法被稱為動(dòng)態(tài)方式,即利用了java的反射機(jī)制。還可以寫成靜態(tài)方式,這就需要在TestCase里寫兩個(gè)方法了,如下:
public?static?Test?suite()?{????TestSuite?suite=new?TestSuite();
????suite.addTest(new?TestTeacherAction());
????return?suite;????
}
protected?void?runTest()?throws?Throwable?{
????testListTeacherAction();
????testEditTeacherAction();
????testSaveTeacherAction();
}
這種方式允許用戶選擇執(zhí)行某些testXXX()方法,而且這些方法也不一定以test開頭,反正只要在runTest()里指定的都給執(zhí)行。而suite()方法與動(dòng)態(tài)方式比也有變化。要注意的是,如果按動(dòng)態(tài)方式寫suite()就不要再覆蓋runTest()方法了,我實(shí)驗(yàn)后發(fā)現(xiàn),這樣會(huì)造成runTest()中指定的方法被反復(fù)執(zhí)行n次,其中n等于textXXX()方法的數(shù)目。
另外一點(diǎn),關(guān)于JUnite對(duì)Test的計(jì)數(shù),在動(dòng)態(tài)方式下,JUnit是按照testXXX()的數(shù)目計(jì)數(shù)的;而在靜態(tài)方式下,是按照TestCase的數(shù)目計(jì)數(shù)的。
還有一點(diǎn)很重要,動(dòng)態(tài)方式下,setUp()和tearDown()這兩個(gè)方法是在每個(gè)testXXX()方法的前后執(zhí)行;而靜態(tài)方式下,是在每個(gè)TestCase的前后執(zhí)行,也就是說,同一個(gè)TestCase中兩個(gè)測(cè)試方法之間可能不會(huì)經(jīng)過tearDown()和setUp()的過程。
至于動(dòng)態(tài)方式和靜態(tài)方式的選擇,可以根據(jù)上面所說的進(jìn)行參考。不過先聲明,以上都是我自己測(cè)試得到的結(jié)論,存在出現(xiàn)錯(cuò)誤的可能性(歡迎告知),以及沒有涉及到的方面。
我本人比較prefer動(dòng)態(tài)方式,畢竟代碼量小一些
本文轉(zhuǎn)自博客園八進(jìn)制的博客,原文鏈接:[測(cè)試]將TestCase整合,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原博主。
總結(jié)
以上是生活随笔為你收集整理的[测试]将TestCase整合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 金融安全资讯精选 2017年第十六期:逐
- 下一篇: java项目实现流水号自动增长