




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第15章單元測試工具
15.1Junit的安裝15.2Junit的特點(diǎn)15.3Junit的內(nèi)容15.4Junit的設(shè)計(jì)原則15.5測試示例
15.1Junit的安裝
首先給出Junit3.8.1版本的安裝步驟,如下所示:
(1)下載Junit。登錄Junit的網(wǎng)站(/),從該網(wǎng)站可以下載Junit,并可找到相關(guān)資料。
(2)解包Junit,如表15.1所示。
(3)檢驗(yàn)安裝Junit。檢驗(yàn)Junit是否安裝正確,執(zhí)行Junit自帶的測試示例程序,詳細(xì)步驟如下所示:
①打開命令行提示窗口。
②將Junit的目錄(Windows系統(tǒng)下C:\junit3.8.1或linux系統(tǒng)下opt\junit3.8.1)作為當(dāng)前目錄。
③執(zhí)行下列命令:
>java–classpathjunit.jar;.junit.textui.TestRunner
junit.samples.AllTests執(zhí)行測試命令,類路徑包含了junit.jar和當(dāng)前的目錄(.)。junit.jar是僅有的需要放到類路徑下的文件。當(dāng)前的目錄(.)是解包Junit的目錄,Junit測試的所有*.class文件從此開始。junit.textui.TestRunner是Junit的基于文本的測試運(yùn)行器的類名,會執(zhí)行所有的Junit測試,并將結(jié)果報(bào)告給控制臺。junit.samples.AllTests是運(yùn)行測試套件的名字。
(4)運(yùn)行Junit測試。
15.2Junit的特點(diǎn)
Junit用于單元級測試的開放式框架,具有如下優(yōu)勢:
(1)?Junit是完全免費(fèi)的。Junit是公開源代碼的,可以進(jìn)行二次開發(fā)。
(2)使用方便。Junit可以快速地撰寫測試并檢測程序代碼,隨著程序代碼增加測試用例,Junit執(zhí)行測試類似編譯程序代碼一樣容易。
(3)?Junit檢驗(yàn)結(jié)果并提供立即回饋。Junit自動執(zhí)行并且檢查結(jié)果,執(zhí)行測試后獲得簡單回饋,不需要人工檢查測試結(jié)果報(bào)告。
(4)?Junit合成測試系列的層級架構(gòu)。Junit把測試組織成測試系列,允許組合多個測試并自動回歸整個測試系列。Junit與Ant結(jié)合實(shí)施增量開發(fā)和自動化測試。
(5)?Junit提升軟件的穩(wěn)定性。Junit使用小版本發(fā)布,控制代碼更改量。同時(shí),引入了重構(gòu)概念,提高軟件代碼質(zhì)量。
(6)與IDE的集成。與Java相關(guān)的IDE環(huán)境集成,實(shí)現(xiàn)測試及開發(fā)代碼之間無縫連接。
15.3Junit的內(nèi)容
Junit作為單元測試框架,共有六個包,其中最核心的三個包是Junit.framework、Junit.runner和Junit.textui。Junit.framework是測試構(gòu)架,包含了Junit測試類所需的所有基類;Junit.runner負(fù)責(zé)測試驅(qū)動的全過程;Junit.textui負(fù)責(zé)文字方式的用戶交互。
(1)
Junit.framework共有6個主要類或接口,分別是Test、Assert、TestCase、TestSuite、TestListener和TestResult,
TestSuite處理TestCase有6個規(guī)約,否則便會拒絕執(zhí)行測試。這6個規(guī)約如下所示:
●該測試用例必須是公有類。
●該測試用例必須繼承于TestCase類。
●測試用例中測試方法必須是公有的(Public)。
●測試用例中測試方法必須被聲明為Void。
●測試用例中的測試方法的前置名詞必須是test。
●測例中測試方法無任何傳參。TestSuite處理的測試用例標(biāo)準(zhǔn)寫法:
//必須聲明為Public類,繼承于Junit.framework.TestCase類
PublicclassClass_TestCaseextendsTestCase{
//標(biāo)準(zhǔn)測試用例構(gòu)造方法無需變動
PublicClass_TestCase(){
//必須聲明為public
Super();
//默認(rèn)寫法一般不用重寫
}
PublicvoidtestAMethod(){…}//測試方法必須聲明為Public,并且加上“test”
//修飾前綴
PublicvoidtestBMethod(){…}
}
(2)?Junit.runner包中定義Junit測試框架的交互形式,也是整個Junit的交互框架。BaseTestRunner抽象類是Junit.runner包的核心類,用于實(shí)現(xiàn)TestListener接口,定義運(yùn)行測試的公共方法。所有Junit框架和外界進(jìn)行交互的行為都被此包所定義。BaseTestRunner抽象類分別被Junit中awtui、swingui和textui三個包中同名的TestRunner方法共同繼承,形成3種不同風(fēng)格的Junit交互模式。
一般來說,命令行交互模式執(zhí)行測試速度最快,界面簡單,返回的錯誤值集成到Ant中進(jìn)行后續(xù)處理。圖形交互模式執(zhí)行測試,采用3種色塊:灰色、綠色、紅色標(biāo)注測試分組,給出相關(guān)測試失敗的錯誤原因。其中,灰色代表羞澀,表示單元代碼的錯誤輸出;綠色等同于活躍的生命,表示結(jié)果正確;紅色表示當(dāng)前代碼出現(xiàn)了嚴(yán)重的錯誤。
(3)?Junit.textui包中主要的類是TestRunner,繼承了BaseTestRunner,是客戶對象調(diào)用的起點(diǎn),負(fù)責(zé)對整個測試流程跟蹤,顯示返回測試結(jié)果,報(bào)告測試進(jìn)度。
15.4Junit的設(shè)計(jì)原則
Junit不僅是驗(yàn)證程序的正確性或者是一種發(fā)現(xiàn)Bug的工具,而且是為了驗(yàn)證被測試代碼是否實(shí)現(xiàn)了符合預(yù)期設(shè)計(jì)而存在。Junit重構(gòu)功能如下所示。
步驟一:編寫單元級測試代碼,進(jìn)行測試用例的設(shè)計(jì)。
步驟二:編寫代碼通過單元級測試。
步驟三:重構(gòu)的運(yùn)用。
步驟四:重新運(yùn)行測試。
下面給出Junit測試的設(shè)計(jì)原則。
1)不要測試簡單的情況
Junit只是一個優(yōu)秀的單元級測試架構(gòu),并沒有規(guī)定要測試些什么。一般來說,被測試類的每一個公共方法對應(yīng)一個測試方法,但是對于一些不可能出錯的方法,例如Set和Get方法,這樣的做法就沒有任何意義了。
2)測試任何可能出現(xiàn)錯誤的地方
極限編程(XP)的測試原則之一是不放過任何可能出錯的地方。如果類復(fù)雜,則完全測試的難度較大;反之,如果類簡單,則完全測試的可能性就大。Junit支持重構(gòu),強(qiáng)調(diào)類在功能上盡可能簡單易理解。
3)測試邊界條件
邊界條件必須考慮可能的溢出,例如集合是否為空、系統(tǒng)內(nèi)存地址的溢出、數(shù)組的第一個和最后一個元素。
通常需要考慮的邊界條件有:
(1)未初始化:很多編譯器能夠在某種情況下給出對象沒有初始化的信息提示,但是更多的隱藏未初始化情況被忽略。
(2)?Null值:如果輸入Null值,代碼該如何處理,是否會拋出指定的異常情況。
(3)最大值、最小值:第一個和最后一個是必然的選擇。
(4)臨界值:如果超過最大值或者小于最小值,是否會拋出指定的異常情況。
(5)初始值:不同條件語句的初始值不同,是0還是1或者循環(huán)次數(shù)是i++還是--i等。
4)自動化
Junit單元級測試必須被自動化,對于重構(gòu)代碼的更新意味著能快速反饋。另外,自動化測試也意味著對測試結(jié)果自動評價(jià)其是否符合預(yù)期值的設(shè)定。
5)測試依賴于接口
利用類接口進(jìn)行測試是一種策略,即測試要依賴于對象接口的實(shí)現(xiàn)。從設(shè)計(jì)上來看,頻繁地測試一個類的非接口方法是不正常的,這意味著過多地依賴于類的實(shí)現(xiàn)而非類的接口。
15.5測試示例
通過以下幾個步驟,Junit完成簡單的測試:
(1)創(chuàng)建TestCase類的一個子類。
(2)編寫若干測試用例,每個測試用例書寫格式如下所示:
Publicvoidtest<TestCaseName>(){…}
(3)編寫一個測試套件方法加入第(2)步編寫的測試用例。
PublicstaticTestsuite(){…}
編譯上述子類以及被測構(gòu)件,用Junit提供的運(yùn)行器TestRunner運(yùn)行測試。
【例15-1】Junit測試的簡單范例。
步驟如下:
步驟1:創(chuàng)建一個TestCase的子類。
packagejunitfaq;
importjava.util.*;
importjunit.framework.*;
publicclassSimpleTestextendsTestCase{
publicSimpleTest(Stringname){
super(name);
}步驟2:寫一個測試方法斷言期望的結(jié)果。
publicvoidtestEmptyCollection(){
Collectioncollection=newArrayList();
assertTrue(collection.isEmpty());
}
步驟3:寫一個suite()方法,使用反射動態(tài)地創(chuàng)建包含
testXxxx方法的測試套件。
publicstaticTestsuite(){
returnnewTestSuite(SimpleTest.class);
}步驟4:運(yùn)行測試。
方法一:文本方式。
在main()方法里調(diào)用junit.textui.TestRunner.run(…),具體代碼如下所示:
publicstaticvoidmain(Stringargs[]){
junit.textui.TestRunner.run(suite());
}
}
運(yùn)行結(jié)果如圖15.1所示。圖15.1【例15-1】文本方式運(yùn)行結(jié)果分析測試如下所示:Time上的小點(diǎn)表示測試個數(shù),如果測試通過則顯示OK;否則在小點(diǎn)的后邊標(biāo)上F,表示該測試失敗。
Junit報(bào)告結(jié)果為OK,表明測試成功;反之,根據(jù)Junit提示的錯誤信息進(jìn)行修正。
方法二:圖形方式。
采用如下語句,其執(zhí)行結(jié)果如圖15.2所示。
javajunit.swingui.TestRunnerjunitfaq.SimpleTest圖15.2【例15-1】圖形方式運(yùn)行結(jié)果實(shí)際測試某個類功能常常需要執(zhí)行一些共同的操作,完成以后需要銷毀所占用的資源(例如網(wǎng)絡(luò)連接、數(shù)據(jù)庫連接,關(guān)閉打開的文件等)。TestCase類提供的setUp方法在每個testXxxx方法之前運(yùn)行,而tearDown方法在每個testXxxx方法結(jié)束以后執(zhí)行,既共享了初始化代碼,又消除了測試代碼之間的相互影響。
【例15-2】
判斷三角形。
(1)?Triangle類作為三角形類,用于求解三角形的周長、面積等,代碼如下所示。
importjava.lang.Math;
publicclassTriangle
{
inta,b,c;
doublearea,len;
publicvoidset(inti,intj,intk)
{
a=i;
b=j;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題實(shí)驗(yàn)申報(bào)書
- 保姆合同范本家政
- 湖南高校課題申報(bào)書
- 合金網(wǎng)供貨合同范本
- 單項(xiàng)建筑施工合同范本
- 信貸貸款合同范本
- 初中校級課題申報(bào)書
- 發(fā)票供銷合同范本
- 南匯家電運(yùn)輸合同范本
- 保時(shí)捷合同范本
- 【課件】第二單元第三節(jié)漢族民歌課件-2021-2022學(xué)年高中音樂人音版(2019)必修音樂鑒賞
- 高中人音版必修 音樂鑒賞20人民音樂家課件
- 風(fēng)電齒輪箱講義(20151010)
- 小組合作學(xué)習(xí)評價(jià)量化表
- 石油化工行業(yè)典型事故案例
- 圓二色譜儀操作規(guī)程培訓(xùn)
- 幼兒園一日生活中的保教結(jié)合(課堂PPT)
- 有害物質(zhì)培訓(xùn)教材(ROHS2.0及REACH)
- 德語A1單詞表
- ARL4460 OXSAS曲線制作及學(xué)習(xí)筆記
- 高三地理二輪專題河流特征
評論
0/150
提交評論