您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > junit
軟件測(cè)試之使用ant進(jìn)行junit測(cè)試
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/3/20 14:24:56 ] 推薦標(biāo)簽:

一.關(guān)于Junit
  關(guān)于為什么junit.jar包不能放到lib/ext目錄中:
先談?wù)勵(lì)愌b載器
  java虛擬機(jī)和程序都調(diào)用ClassLoader類(lèi)的loadClass的方法來(lái)加載。java虛擬機(jī)中可有多個(gè)類(lèi)加載器,bootstrap來(lái)加載rt.jar(java核心包),ExtClassLoader加載<JAVA_HOME>/jre/lib/ext裝載jar包,AppClassLoader加載classpath環(huán)境變量指定的路徑中的類(lèi)。ExtClassLoader是AppClassLoader的父類(lèi)。
  再說(shuō)junit.jar為什么不能放到lib/ext目錄下的原因:
  現(xiàn)在如果把junit.jar包放到ext目錄下,ExtClassLoader類(lèi)裝載器要把junit.jar先裝載,junit然后要去調(diào)用那個(gè)被測(cè)試類(lèi),然而那個(gè)被測(cè)試類(lèi)是放在classpath中,被AppClassLoader裝載,因?yàn)镋xtClassLoader是AppClassLoader的父類(lèi),AppClassLoader已經(jīng)裝載了被測(cè)試類(lèi),ExtClassLoader并不知道APP已經(jīng)裝載了這個(gè)類(lèi),它還要去裝載被測(cè)試類(lèi),結(jié)果找不到這個(gè)類(lèi)。會(huì)拋出異常了。但是如果把被測(cè)試類(lèi)也打包為jar包放到ext目錄底下應(yīng)該沒(méi)問(wèn)題了,但這樣做單元測(cè)試的時(shí)候是不是比較麻煩?
  Junit作為一個(gè)單元測(cè)試工具,在保證代碼的質(zhì)量上,起到比較重要的作用.我們使用的為Junit3.8.1版本,用的時(shí)候需要把junit.jar添加到項(xiàng)目編譯和運(yùn)行的classpath中,在簡(jiǎn)單的Junit方式中,我們將所有的測(cè)試放到TestCase的子類(lèi)中, 每個(gè)測(cè)試必須是public,不接受任何參數(shù),返回void,并且以一個(gè)"test"開(kāi)頭的方法名(佳實(shí)踐,Junit鼓勵(lì)你這么做).傳統(tǒng)情況下,setUp()方法創(chuàng)建一個(gè)對(duì)象的通用集合并將其初始化,這些對(duì)象在所有的測(cè)試中都將被用到.setUp()與構(gòu)造方法的區(qū)別是:setUp()在每次測(cè)試前被調(diào)用.測(cè)試完之后,再調(diào)用tearDown()方法(可選)在每次測(cè)試后執(zhí)行清除工作.
使用Junit的好處:
  1、對(duì)于xp編程而言,要求在編寫(xiě)代碼之前先寫(xiě)測(cè)試,這樣可以強(qiáng)制你在寫(xiě)代碼之前好好的思考代碼(方法)的功能和邏輯,否則編寫(xiě)的代碼很不穩(wěn)定,那么你需要同時(shí)維護(hù)測(cè)試代碼和實(shí)際代碼,這個(gè)工作量會(huì)大大增加。因此在xp編程中,基本過(guò)程是這樣的:構(gòu)思-》編寫(xiě)測(cè)試代碼-》編寫(xiě)代碼-》測(cè)試,而且編寫(xiě)測(cè)試和編寫(xiě)代碼都是增量式的,寫(xiě)一點(diǎn)測(cè)一點(diǎn),在編寫(xiě)以后的代碼中如果發(fā)現(xiàn)問(wèn)題可以較塊的追蹤到問(wèn)題的原因,減小回歸錯(cuò)誤的糾錯(cuò)難度
  2、對(duì)于重構(gòu)而言,其好處和xp編程中是類(lèi)似的,因?yàn)橹貥?gòu)也是要求改一點(diǎn)測(cè)一點(diǎn),減少回歸錯(cuò)誤造成的時(shí)間消耗。
  3、對(duì)于非以上兩種情況,我們?cè)陂_(kāi)發(fā)的時(shí)候使用junit寫(xiě)一些適當(dāng)?shù)臏y(cè)試也是有必要的,因?yàn)橐话阄覀円彩切枰帉?xiě)測(cè)試的代碼的,可能原來(lái)不是使用的junit,如果使用  junit,而且針對(duì)接口(方法)編寫(xiě)測(cè)試代碼會(huì)減少以后的維護(hù)工作,例如以后對(duì)方法內(nèi)部的修改(這個(gè)是相當(dāng)于重構(gòu)的工作了)。另外是因?yàn)閖unit有斷言功能,如果測(cè)試結(jié)果不通過(guò)會(huì)告訴我們那個(gè)測(cè)試不通過(guò),為什么,而如果是想以前的一般做法是寫(xiě)一些測(cè)試代碼看其輸出結(jié)果,然后再由自己來(lái)判斷結(jié)果使用正確,使用junit的好處是這個(gè)結(jié)果是否正確的判斷是它來(lái)完成的,我們只需要看看它告訴我們結(jié)果是否正確可以了,在一般情況下會(huì)大大提高效率。
如何使用JUnit寫(xiě)測(cè)試?
  簡(jiǎn)單的范例如下:
  1、創(chuàng)建一個(gè)TestCase的子類(lèi):
package junitfaq;
import java.util.*;
import junit.framework.*;
public class SimpleTest extends TestCase {
public SimpleTest(String name) {
super(name);
}
  2、寫(xiě)一個(gè)測(cè)試方法斷言期望的結(jié)果:
public void testEmptyCollection() {
Collection collection = new ArrayList();
assertTrue(collection.isEmpty());
}
  注意:JUnit推薦的做法是以test作為待測(cè)試的方法的開(kāi)頭,這樣這些方法可以被自動(dòng)找到并被測(cè)試。
  3、寫(xiě)一個(gè)suite()方法,它會(huì)使用反射動(dòng)態(tài)的創(chuàng)建一個(gè)包含所有的testXxxx方法的測(cè)試套件:
public static Test suite() {
return new TestSuite(SimpleTest.class);
}
  4、寫(xiě)一個(gè)main()方法以文本運(yùn)行器的方式方便的運(yùn)行測(cè)試:
public static void main(String args[]) {
junit.textui.TestRunner.run(suite());
}
}

上一頁(yè)123下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd