您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源單元測(cè)試工具 > junit
用JUnit框架實(shí)現(xiàn)Java單元測(cè)試
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/2/17 16:04:40 ] 推薦標(biāo)簽:

  隨著軟件項(xiàng)目的逐漸增大,軟件測(cè)試在軟件開發(fā)中的地位顯得越來(lái)越重要。如果軟件項(xiàng)目沒(méi)有良好的測(cè)試流程,隨著系統(tǒng)的增大,無(wú)論項(xiàng)目管理人員還是軟件開發(fā)人員都會(huì)對(duì)項(xiàng)目的前景失去信心,甚至?xí)䦟?duì)項(xiàng)目的目標(biāo)產(chǎn)生分歧,因?yàn)殚L(zhǎng)期以來(lái)沒(méi)有對(duì)程序代碼和系統(tǒng)設(shè)計(jì)進(jìn)行有效的控制,很多問(wèn)題都被暫時(shí)掩蓋或逐漸演化成其他的問(wèn)題。軟件開發(fā)周期越長(zhǎng),會(huì)使得問(wèn)題進(jìn)化的版本越多,后造成的結(jié)果是“剪不斷,理還亂”。
  單元測(cè)試是整個(gè)測(cè)試流程中基礎(chǔ)的部分,它們要求程序員盡可能早地發(fā)現(xiàn)問(wèn)題,并給予控制,這是其一。另外,如果集成測(cè)試出現(xiàn)問(wèn)題,它們可以幫助診斷。這樣為在軟件開發(fā)流程中建立高效的事件反應(yīng)機(jī)制打下了堅(jiān)實(shí)基礎(chǔ)。

  JUnit是為Java程序開發(fā)者實(shí)現(xiàn)單元測(cè)試提供一種框架,使得Java單元測(cè)試更規(guī)范有效,并且更有利于測(cè)試的集成。
  JUnit的內(nèi)部結(jié)構(gòu)
  JUnit的軟件結(jié)構(gòu)
  JUnit 共有七個(gè)包,核心的包是junit.framework 和junit.runner。Framework包負(fù)責(zé)整個(gè)測(cè)試對(duì)象的構(gòu)架,Runner負(fù)責(zé)測(cè)試驅(qū)動(dòng)。
  JUnit的類結(jié)構(gòu)
  JUnit有四個(gè)重要的類:TestSuite、TestCase、TestResult、TestRunner。前三個(gè)類屬于Framework包,后一個(gè)類在不同的環(huán)境下是不同的。這里使用的是文本測(cè)試環(huán)境,所以用的是 junit.textui.TestRunner。各個(gè)類的職責(zé)如下:
  1.TestResult,負(fù)責(zé)收集TestCase所執(zhí)行的結(jié)果,它將結(jié)果分為兩類,客戶可預(yù)測(cè)的Failure和沒(méi)有預(yù)測(cè)的Error。同時(shí)負(fù)責(zé)將測(cè)試結(jié)果轉(zhuǎn)發(fā)到TestListener(該接口由TestRunner繼承)處理;
  2.TestRunner,客戶對(duì)象調(diào)用的起點(diǎn),負(fù)責(zé)對(duì)整個(gè)測(cè)試流程的跟蹤。能夠顯示返回的測(cè)試結(jié)果,并且報(bào)告測(cè)試的進(jìn)度。
  3.TestSuite, 負(fù)責(zé)包裝和運(yùn)行所有的TestCase。
  4.TestCase, 客戶測(cè)試類所要繼承的類,負(fù)責(zé)測(cè)試時(shí)對(duì)客戶類進(jìn)行初始化,以及測(cè)試方法調(diào)用。
  另外還有兩個(gè)重要的接口:Test和TestListener。
  1.Test, 包含兩個(gè)方法:run() 和countTestCases(),它是對(duì)測(cè)試動(dòng)作特征的提取。
  2.TestListener, 包含四個(gè)方法:addError()、addFailure()、startTest()和endTest(),它是對(duì)測(cè)試結(jié)果的處理以及測(cè)試驅(qū)動(dòng)過(guò)程的動(dòng)作特征的提取。
  下面給出的兩個(gè)類圖(篇幅有限,只顯示主要部分)很好地闡明了類之間的關(guān)系,以及junit的設(shè)計(jì)目標(biāo)(如圖1)。測(cè)試案例的類采用Composite模式。這樣,客戶的測(cè)試對(duì)象轉(zhuǎn)變成一個(gè)“部分—整體”的層次結(jié)構(gòu)?蛻舸a僅需要繼承類TestCase,可以輕松的與已有的其他對(duì)象組合使用,從而使得單元測(cè)試的集成更加方便。

圖1 測(cè)試結(jié)構(gòu)圖

圖2是測(cè)試跟蹤類圖。

  圖2左邊TestSuite包含了測(cè)試對(duì)象集合,右邊包含了測(cè)試結(jié)果集。具體如何處理結(jié)果,以及包含哪些測(cè)試對(duì)象,并沒(méi)有立即得出結(jié)論,而是盡量地延遲到具體實(shí)現(xiàn)的時(shí)候。例如,實(shí)現(xiàn)接口TestListener的JUnit中含有:junit.awtui.TestRunner、junit.swingui. TestRunner、junit.ui.TestRunner等,甚至客戶用自己的類實(shí)現(xiàn)TestListener,從而達(dá)到多樣化的目的。
   
  
  從以上兩個(gè)類圖,可以了解JUnit對(duì)單元測(cè)試的基本思路,這個(gè)框架的核心是結(jié)果集和案例集。  

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