《軟件測試基礎(chǔ)》課件-第15章_第1頁
《軟件測試基礎(chǔ)》課件-第15章_第2頁
《軟件測試基礎(chǔ)》課件-第15章_第3頁
《軟件測試基礎(chǔ)》課件-第15章_第4頁
《軟件測試基礎(chǔ)》課件-第15章_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論