軟件測試(第2章)_第1頁
軟件測試(第2章)_第2頁
軟件測試(第2章)_第3頁
軟件測試(第2章)_第4頁
軟件測試(第2章)_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第二章JUnit實際應用課程目標JUnit中常用的接口JUnit中常用的類使用JUnit的一些經(jīng)驗

體驗項目——<使用JUnit對程序進行測試>

想知道怎么使用JUnit對java程序進行測試嗎?在經(jīng)過書寫測試用例和相關的代碼之后,程序測試結(jié)果如圖所示:圖2-1中黑框圈起來的部分顯示為綠色,表示測試已經(jīng)成功通過。JUnit中常用的接口JUnit中最常用的接口是Test接口和TestListener接口。

Test接口的主要作用是運行測試和收集測試結(jié)果,Test接口使用了Composite設計模式,是單獨測試用例(TestCase)、聚合測試模式(TestSuite)及測試擴展(TestDecorator)的共同接口。

Test接口提供了兩個方法,分別是publicintcountTestCases()和publicvoid

run(TestResult),打開上一章中我們已經(jīng)配置好的Eclipse環(huán)境,在“包資源管理器”窗口中展開“ProjectWithJUnit”工程,可以看到這兩個方法,如圖所示:

其中,countTestCases()方法用來統(tǒng)計該次測試有多少個TestCase,另外一個方法是run(TestResult),TestResult是實例接受測試結(jié)果,run方法執(zhí)行本次測試。

TestListener接口是個事件監(jiān)聽接口,可供TestRunner類使用。它通知listener的對象相關事件,方法包括測試開始startTest(Testtest),測試結(jié)束endTest(Testtest),增加錯誤addError(Testtest,Throwablet)和增加失敗addFailure(Testtest,AssertionFailedErrora),如上圖所示。JUnit中常用的類JUnit中常用的類有:TestCase類Assert類TestSuite類TestResult類TestFailure類TestCase類 TestCase類是一個抽象類,是Test接口的抽象實現(xiàn),它定義了測試中的固定方法,它不能被實例化,只能被繼承,其構(gòu)造函數(shù)TestCase(Stringname)根據(jù)輸入的測試名稱name創(chuàng)建一個測試實例。由于每一個TestCase在創(chuàng)建時都要有一個名稱,所以若某個測試失敗了,便可識別出是哪個測試失敗。Assert類 Assert類是一個靜態(tài)類,它是一系列斷言方法的集合,它包含了一組靜態(tài)的測試方法,用于對期望值和實際值進行比較,從而確定是否正確,如果測試失敗,Assert類就會拋出一個AssertionFailedError異常,JUnit測試框架將這種錯誤歸入Failes并加以記錄,同時標志為未通過測試。如果該類方法中指定一個String類型的參數(shù),則該參數(shù)將被作為AssertionFailedError異常的標識信息,告訴測試人員該異常的詳細信息。

JUnit提供了6大類31組斷言方法,包括基礎斷言、數(shù)字斷言、字符斷言、布爾斷言、對象斷言,包含方法如圖所示:TestSuite類 TestSuite類是一個測試包類,即多個測試的組合,該類負責組裝多個TestCase。待測的類中可能包括了對被測類的多個測試,而TestSuite負責收集這些測試,使我們可以在一個測試中,完成全部的對被測類的測試。

TestSuite類實現(xiàn)了Test接口,且可以包含其它的TestSuite。它可以處理加入Test時的所有拋出異常。TestSuite類 TestSuite處理測試用例有6個規(guī)約(否則會被拒絕執(zhí)行測試),如下所示:測試用例必須是公有類(public)。測試用例必須繼承于TestCase類。測試用例的測試方法必須是公有的(public)。測試用例的測試方法必須被聲明為void。測試用例中測試方法的前置名詞必須是test。測試用例中測試方法無任何傳遞參數(shù)。該類包含的方法如圖所示:TestResult類 TestResult類是一個結(jié)果類,它集合了任意測試的累加結(jié)果,通過TestResult實例傳遞給每個測試的run()方法。TestResult在執(zhí)行TestCase時,如果失敗,則會拋出異常。 這個類包含的方法如圖所示:TestFailure類 TestFailure類是一個“失敗”狀況的收集類,解釋每次測試執(zhí)行過程中出現(xiàn)的異常情況。它所包含的方法如圖所示:ComparisonFailure類 ComparisonFailure類提供兩個字符串的比對,不匹配則給出詳細的差異字符。 有關JUnit中類和方法的詳細使用,請參看JUnit的幫助文檔(即API文檔)。下面我們做一個測試的例子(1)用Eclipse建立一個項目FirstTest,然后再建立一個包,包名為src,在src包下創(chuàng)建一個名為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包下再寫一個名為ExampleTest.java的測試用例,用于測試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("這次測試",triangle.isType(triangle),"不等邊三角形");}publicstaticvoidmain(String[]args){ junit.textui.TestRunner.run(suite()); //junit.textui.TestRunner.run(ExampleTest.class);}

該測試用例繼承自TestCase,并用setUp()方法對Triangle類實例化了一個對象triangle,由于這里是對isType()和isTriangle()兩個方法進行測試,所以用了TestSuite,并將需要測試的類ExampleTest.class傳給它,最后將其封裝在一個suite()方法中,testIsTriangle()方法用于測試isTriangle(),testIsType()方法用于測試isType(),其中assertTrue()方法用于確定返回值是不是True,assertEquals()方法用于確定它的參數(shù)是不是相等,在Eclipse中運行上面的代碼,程序運行結(jié)束后,在Eclipse中出現(xiàn)運行器窗口,如圖所示:上圖中方框圈起來的部分顯示為綠色,表示測試已經(jīng)通過。如果我們將ExampleTest.java中的代碼:“assertEquals("這次測試",triangle.isType(triangle),"不等邊三角形");”改為如下代碼:“assertEquals("這次測試",triangle.isType(triangle),"等邊三角形");”

上圖中方框圈起來的部分顯示為紅褐色,表示測試沒有通過,其中故障跟蹤欄中已經(jīng)顯示出是“比較失敗”的錯誤,此時如果雙擊故障跟蹤欄中的第一行代碼,即彈出“比較結(jié)果”消息框,如下圖所示:

可以看到testIsType()方法中期望的是“不等邊三角形”,而實際結(jié)果是“等邊三角形”,此時雙擊故障跟蹤欄中的第二行代碼,則ExampleTest.java代碼中測試出錯的代碼段會高亮顯示。 下面我們再進行一個測試,我們先將testIsType()方法中的“等邊三角形”,改為“不等邊三角形”,這樣這個方法就不會出錯了,然后我們將testIsTriangle()方法中的代碼: “assertTrue(triangle.isTriangle(triangle));”

改為: “assertFalse(triangle.isTriangle(triangle));”

上圖中方框圈起來的部分顯示為紅褐色,表示測試沒有通過,看一下故障跟蹤中的第一行,就會發(fā)現(xiàn)這是一個“確認失敗”的錯誤,雙擊故障跟蹤中的第二行,就可以直接到出錯的地方。如下圖所示,其中高亮顯示的部分就是出錯的代碼。測試結(jié)果表明確認結(jié)果不是False,因為在我們初始化三角形的三條邊時,的確是三角形,所以應該返回True,所以這里應該用assertTrue()方法,修改后再運行上面的代碼,就會發(fā)現(xiàn)測試通過了。使用JUnit的一些經(jīng)驗盡量少用TestCase的構(gòu)造函數(shù)初始化對象,要用setUp()和tearDown()方法。不要依賴或假定測試運行的順序,因為JUnit利用Vector保存測試方法,所以不同的平臺會按不同的順序從Vector中取出測試方法。避免編寫有副作用的TestCase。例如:如果隨后的測試依賴于某些特定的交易數(shù)據(jù),就不要提交交易數(shù)據(jù),而使用簡單的回滾就可以了。當繼承一個測試類時,要記得調(diào)用父類的setUp()和tearDown()方法。將測試代碼和工作代碼放在一起,一起進行同步編譯和更新。使用JUnit的一些經(jīng)驗測試類和測試方法應該有一致的命名方案。例如在工作類名前加上Test,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論