版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第二章JUnit實(shí)際應(yīng)用課程目標(biāo)JUnit中常用的接口JUnit中常用的類使用JUnit的一些經(jīng)驗(yàn)
體驗(yàn)項(xiàng)目——<使用JUnit對(duì)程序進(jìn)行測(cè)試>
想知道怎么使用JUnit對(duì)java程序進(jìn)行測(cè)試嗎?在經(jīng)過書寫測(cè)試用例和相關(guān)的代碼之后,程序測(cè)試結(jié)果如圖所示:圖2-1中黑框圈起來的部分顯示為綠色,表示測(cè)試已經(jīng)成功通過。JUnit中常用的接口JUnit中最常用的接口是Test接口和TestListener接口。
Test接口的主要作用是運(yùn)行測(cè)試和收集測(cè)試結(jié)果,Test接口使用了Composite設(shè)計(jì)模式,是單獨(dú)測(cè)試用例(TestCase)、聚合測(cè)試模式(TestSuite)及測(cè)試擴(kuò)展(TestDecorator)的共同接口。
Test接口提供了兩個(gè)方法,分別是publicintcountTestCases()和publicvoid
run(TestResult),打開上一章中我們已經(jīng)配置好的Eclipse環(huán)境,在“包資源管理器”窗口中展開“ProjectWithJUnit”工程,可以看到這兩個(gè)方法,如圖所示:
其中,countTestCases()方法用來統(tǒng)計(jì)該次測(cè)試有多少個(gè)TestCase,另外一個(gè)方法是run(TestResult),TestResult是實(shí)例接受測(cè)試結(jié)果,run方法執(zhí)行本次測(cè)試。
TestListener接口是個(gè)事件監(jiān)聽接口,可供TestRunner類使用。它通知listener的對(duì)象相關(guān)事件,方法包括測(cè)試開始startTest(Testtest),測(cè)試結(jié)束endTest(Testtest),增加錯(cuò)誤addError(Testtest,Throwablet)和增加失敗addFailure(Testtest,AssertionFailedErrora),如上圖所示。JUnit中常用的類JUnit中常用的類有:TestCase類Assert類TestSuite類TestResult類TestFailure類TestCase類 TestCase類是一個(gè)抽象類,是Test接口的抽象實(shí)現(xiàn),它定義了測(cè)試中的固定方法,它不能被實(shí)例化,只能被繼承,其構(gòu)造函數(shù)TestCase(Stringname)根據(jù)輸入的測(cè)試名稱name創(chuàng)建一個(gè)測(cè)試實(shí)例。由于每一個(gè)TestCase在創(chuàng)建時(shí)都要有一個(gè)名稱,所以若某個(gè)測(cè)試失敗了,便可識(shí)別出是哪個(gè)測(cè)試失敗。Assert類 Assert類是一個(gè)靜態(tài)類,它是一系列斷言方法的集合,它包含了一組靜態(tài)的測(cè)試方法,用于對(duì)期望值和實(shí)際值進(jìn)行比較,從而確定是否正確,如果測(cè)試失敗,Assert類就會(huì)拋出一個(gè)AssertionFailedError異常,JUnit測(cè)試框架將這種錯(cuò)誤歸入Failes并加以記錄,同時(shí)標(biāo)志為未通過測(cè)試。如果該類方法中指定一個(gè)String類型的參數(shù),則該參數(shù)將被作為AssertionFailedError異常的標(biāo)識(shí)信息,告訴測(cè)試人員該異常的詳細(xì)信息。
JUnit提供了6大類31組斷言方法,包括基礎(chǔ)斷言、數(shù)字?jǐn)嘌浴⒆址麛嘌?、布爾斷言、?duì)象斷言,包含方法如圖所示:TestSuite類 TestSuite類是一個(gè)測(cè)試包類,即多個(gè)測(cè)試的組合,該類負(fù)責(zé)組裝多個(gè)TestCase。待測(cè)的類中可能包括了對(duì)被測(cè)類的多個(gè)測(cè)試,而TestSuite負(fù)責(zé)收集這些測(cè)試,使我們可以在一個(gè)測(cè)試中,完成全部的對(duì)被測(cè)類的測(cè)試。
TestSuite類實(shí)現(xiàn)了Test接口,且可以包含其它的TestSuite。它可以處理加入Test時(shí)的所有拋出異常。TestSuite類 TestSuite處理測(cè)試用例有6個(gè)規(guī)約(否則會(huì)被拒絕執(zhí)行測(cè)試),如下所示:測(cè)試用例必須是公有類(public)。測(cè)試用例必須繼承于TestCase類。測(cè)試用例的測(cè)試方法必須是公有的(public)。測(cè)試用例的測(cè)試方法必須被聲明為void。測(cè)試用例中測(cè)試方法的前置名詞必須是test。測(cè)試用例中測(cè)試方法無任何傳遞參數(shù)。該類包含的方法如圖所示:TestResult類 TestResult類是一個(gè)結(jié)果類,它集合了任意測(cè)試的累加結(jié)果,通過TestResult實(shí)例傳遞給每個(gè)測(cè)試的run()方法。TestResult在執(zhí)行TestCase時(shí),如果失敗,則會(huì)拋出異常。 這個(gè)類包含的方法如圖所示:TestFailure類 TestFailure類是一個(gè)“失敗”狀況的收集類,解釋每次測(cè)試執(zhí)行過程中出現(xiàn)的異常情況。它所包含的方法如圖所示:ComparisonFailure類 ComparisonFailure類提供兩個(gè)字符串的比對(duì),不匹配則給出詳細(xì)的差異字符。 有關(guān)JUnit中類和方法的詳細(xì)使用,請(qǐng)參看JUnit的幫助文檔(即API文檔)。下面我們做一個(gè)測(cè)試的例子(1)用Eclipse建立一個(gè)項(xiàng)目FirstTest,然后再建立一個(gè)包,包名為src,在src包下創(chuàng)建一個(gè)名為Triangle.java的Java程序,代碼如下:
packagesrc; publicclassTriangle { protectedlonglborderA=0; protectedlonglborderB=0; protectedlonglborderC=0; }
類中有如下方法:publicTriangle(intlborderA,intlborderB,intlborderC){ this.lborderA=lborderA; this.lborderB=lborderB; this.lborderC=lborderC;}publicbooleanisTriangle(Triangletriangle){ booleanisTrue=false; if((triangle.lborderA>0&&triangle.lborderA<200) &&(triangle.lborderB>0&&triangle.lborderB<200) &&(triangle.lborderC>0&&triangle.lborderC<200)) { if((triangle.lborderA<(triangle.lborderB+triangle.lborderC)) &&(triangle.lborderB<(triangle.lborderA+triangle.lborderC)) &&(triangle.lborderC<(triangle.lborderA+triangle.lborderB))) isTrue=true; } returnisTrue;}publicStringisType(Triangletriangle){ StringstrType=""; if(this.isTriangle(triangle)) { if(triangle.lborderA==triangle.lborderB&&triangle.lborderB==triangle.lborderC) strType="等邊三角形"; elseif((triangle.lborderA!=triangle.lborderB)&& (triangle.lborderB!=triangle.lborderC)&& (triangle.lborderA!=triangle.lborderC)) strType="不等邊三角形"; else strType="等腰三角形"; } returnstrType;}(2)在src包下再寫一個(gè)名為ExampleTest.java的測(cè)試用例,用于測(cè)試Triangle.java,代碼如下:packagesrc;importjunit.framework.TestCase;importjunit.framework.Test;importjunit.framework.TestSuite;publicclassExampleTestextendsTestCase{ publicTriangletriangle;}類中的方法如下:protectedvoidsetUp()throwsException{ //super.setUp(); triangle=newTriangle(10,2,9);}publicstaticTestsuite(){ returnnewTestSuite(ExampleTest.class);}publicvoidtestIsTriangle(){ assertTrue(triangle.isTriangle(triangle));}publicvoidtestIsType(){ assertEquals("這次測(cè)試",triangle.isType(triangle),"不等邊三角形");}publicstaticvoidmain(String[]args){ junit.textui.TestRunner.run(suite()); //junit.textui.TestRunner.run(ExampleTest.class);}
該測(cè)試用例繼承自TestCase,并用setUp()方法對(duì)Triangle類實(shí)例化了一個(gè)對(duì)象triangle,由于這里是對(duì)isType()和isTriangle()兩個(gè)方法進(jìn)行測(cè)試,所以用了TestSuite,并將需要測(cè)試的類ExampleTest.class傳給它,最后將其封裝在一個(gè)suite()方法中,testIsTriangle()方法用于測(cè)試isTriangle(),testIsType()方法用于測(cè)試isType(),其中assertTrue()方法用于確定返回值是不是True,assertEquals()方法用于確定它的參數(shù)是不是相等,在Eclipse中運(yùn)行上面的代碼,程序運(yùn)行結(jié)束后,在Eclipse中出現(xiàn)運(yùn)行器窗口,如圖所示:上圖中方框圈起來的部分顯示為綠色,表示測(cè)試已經(jīng)通過。如果我們將ExampleTest.java中的代碼:“assertEquals("這次測(cè)試",triangle.isType(triangle),"不等邊三角形");”改為如下代碼:“assertEquals("這次測(cè)試",triangle.isType(triangle),"等邊三角形");”
上圖中方框圈起來的部分顯示為紅褐色,表示測(cè)試沒有通過,其中故障跟蹤欄中已經(jīng)顯示出是“比較失敗”的錯(cuò)誤,此時(shí)如果雙擊故障跟蹤欄中的第一行代碼,即彈出“比較結(jié)果”消息框,如下圖所示:
可以看到testIsType()方法中期望的是“不等邊三角形”,而實(shí)際結(jié)果是“等邊三角形”,此時(shí)雙擊故障跟蹤欄中的第二行代碼,則ExampleTest.java代碼中測(cè)試出錯(cuò)的代碼段會(huì)高亮顯示。 下面我們?cè)龠M(jìn)行一個(gè)測(cè)試,我們先將testIsType()方法中的“等邊三角形”,改為“不等邊三角形”,這樣這個(gè)方法就不會(huì)出錯(cuò)了,然后我們將testIsTriangle()方法中的代碼: “assertTrue(triangle.isTriangle(triangle));”
改為: “assertFalse(triangle.isTriangle(triangle));”
上圖中方框圈起來的部分顯示為紅褐色,表示測(cè)試沒有通過,看一下故障跟蹤中的第一行,就會(huì)發(fā)現(xiàn)這是一個(gè)“確認(rèn)失敗”的錯(cuò)誤,雙擊故障跟蹤中的第二行,就可以直接到出錯(cuò)的地方。如下圖所示,其中高亮顯示的部分就是出錯(cuò)的代碼。測(cè)試結(jié)果表明確認(rèn)結(jié)果不是False,因?yàn)樵谖覀兂跏蓟切蔚娜龡l邊時(shí),的確是三角形,所以應(yīng)該返回True,所以這里應(yīng)該用assertTrue()方法,修改后再運(yùn)行上面的代碼,就會(huì)發(fā)現(xiàn)測(cè)試通過了。使用JUnit的一些經(jīng)驗(yàn)盡量少用TestCase的構(gòu)造函數(shù)初始化對(duì)象,要用setUp()和tearDown()方法。不要依賴或假定測(cè)試運(yùn)行的順序,因?yàn)镴Unit利用Vector保存測(cè)試方法,所以不同的平臺(tái)會(huì)按不同的順序從Vector中取出測(cè)試方法。避免編寫有副作用的TestCase。例如:如果隨后的測(cè)試依賴于某些特定的交易數(shù)據(jù),就不要提交交易數(shù)據(jù),而使用簡(jiǎn)單的回滾就可以了。當(dāng)繼承一個(gè)測(cè)試類時(shí),要記得調(diào)用父類的setUp()和tearDown()方法。將測(cè)試代碼和工作代碼放在一起,一起進(jìn)行同步編譯和更新。使用JUnit的一些經(jīng)驗(yàn)測(cè)試類和測(cè)試方法應(yīng)該有一致的命名方案。例如在工作類名前加上Test,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年粵教滬科版選擇性必修3歷史上冊(cè)月考試卷含答案
- 2025年度生態(tài)農(nóng)業(yè)門面房購(gòu)置與農(nóng)產(chǎn)品銷售合同4篇
- 2025年華師大新版七年級(jí)生物下冊(cè)月考試卷
- 2025年滬科新版必修1語文上冊(cè)月考試卷含答案
- 2025年度數(shù)字經(jīng)濟(jì)年薪制工資合同3篇
- 物業(yè)服務(wù)商與商戶就2025年度物業(yè)管理簽訂的合同2篇
- 二零二五年度南京市二手房買賣合同附件清單4篇
- 二零二五年度木材加工鋼材買賣居間合同附帶質(zhì)量監(jiān)管協(xié)議3篇
- 專屬2024人力資源代招服務(wù)合作合同版
- 2025年度能源市場(chǎng)交易代理服務(wù)合同4篇
- 2025年高考物理復(fù)習(xí)壓軸題:電磁感應(yīng)綜合問題(解析版)
- 012主要研究者(PI)職責(zé)藥物臨床試驗(yàn)機(jī)構(gòu)GCP SOP
- 2024年個(gè)人車位租賃合同經(jīng)典版(二篇)
- 農(nóng)耕研學(xué)活動(dòng)方案種小麥
- 2024年佛山市勞動(dòng)合同條例
- 污水管網(wǎng)規(guī)劃建設(shè)方案
- 城鎮(zhèn)智慧排水系統(tǒng)技術(shù)標(biāo)準(zhǔn)
- 采購(gòu)管理制度及流程采購(gòu)管理制度及流程
- 五年級(jí)美術(shù)下冊(cè)第9課《寫意蔬果》-優(yōu)秀課件4人教版
- 節(jié)能降耗課件
- 尼爾森數(shù)據(jù)市場(chǎng)分析報(bào)告
評(píng)論
0/150
提交評(píng)論