Junit自動化測試工具_(dá)第1頁
Junit自動化測試工具_(dá)第2頁
Junit自動化測試工具_(dá)第3頁
Junit自動化測試工具_(dá)第4頁
Junit自動化測試工具_(dá)第5頁
已閱讀5頁,還剩81頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第七章

Junit自動化測試工具主講人:邢慧芬內(nèi)容提要7.1Junit簡介7.1.1Junit簡介7.1.2Junit的安裝

7.2Junit框架7.2.1

軟件自動化測試框架7.2.2JUnit核心類及接口7.2.3JUnit單元測試的步驟

7.3Eclipse中Junit的使用內(nèi)容提要7.1Junit簡介7.1.1Junit簡介7.1.2Junit的安裝

7.2Junit框架7.2.1

軟件自動化測試框架7.2.2JUnit核心類及接口7.2.3JUnit單元測試的步驟

7.3Eclipse中Junit的使用內(nèi)容回顧——單元測試單元測試集成測試功能測試壓力/負(fù)荷測試驗收測試單元測試單元測試是開發(fā)者編寫的一小段代碼,用于檢驗被測代碼的一個很小的、很明確的功能是否正確通常而言,一個單元測試是用于判斷某個特定條件(或者場景)下某個特定函數(shù)的行為單元測試兩個重要的慨念樁模塊(stub):指模擬被測模塊所調(diào)用的模塊驅(qū)動模塊(Driver):指模擬被測模塊的上級模塊。驅(qū)動模塊常用來接受測試數(shù)據(jù),啟動被測模塊并輸出結(jié)果。單元測試的方法人工靜態(tài)分析:通過人工閱讀代碼的方式來查找代碼中存在的錯誤自動靜態(tài)分析:使用代碼復(fù)查工具,主要用來發(fā)現(xiàn)語法特征錯誤自動動態(tài)測試:用工具自動生成測試用例并執(zhí)行被測程序,主要用來發(fā)現(xiàn)行為特征錯誤人工動態(tài)測試:人工設(shè)定程序的輸入和預(yù)期輸出,執(zhí)行程序,判斷實際輸出是否符合預(yù)期,若不符則自動報告錯誤。利用JUnit完成的便是人工動態(tài)測試單元測試的必要性帶來比功能測試更廣范圍的測試覆蓋讓團隊協(xié)作成為可能能夠防止衰退,降低對調(diào)試的需要能為我們帶來重構(gòu)的勇氣能改進(jìn)實現(xiàn)設(shè)計當(dāng)作開發(fā)者文檔使用內(nèi)容提要7.1Junit簡介7.1.1Junit簡介7.1.2Junit的安裝

7.2Junit框架7.2.1

軟件自動化測試框架7.2.2JUnit核心類及接口7.2.3JUnit單元測試的步驟

7.3Eclipse中Junit的使用7.1.1Junit簡介JUnit是Java社區(qū)中知名度最高的單元測試工具。由ErichGamma和KentBeck共同開發(fā)完成Junit在代碼驅(qū)動單元測試框架家族里無疑是最為成功的一例。在“最佳Java性能監(jiān)視/測試工具”類別里,多次獲得“JavaWorld編者精品獎(Editors’ChoiceAwards)”。開源軟件支持語言Smalltalk,Java,C++,Perl等等支持的IDEJBuilder,VisualAge,Eclipse等JUnit功能可供選擇的其他前端或者test-runner,用來顯示你的測試結(jié)果用單獨的classloader來運行每個單元測試,以避免副作用標(biāo)準(zhǔn)的資源初始化和回收方式(setUp和tearDown)各種不同的assert方法,讓你檢查測試結(jié)果的操作變得更容易同流行的工具,比如Ant,以及流行IDE比如Eclipse,JBuilder整合JUnit的好處開源工具,可以免費使用,可以找到很多實際項目中的應(yīng)用示例。由于源碼開放,開發(fā)者還可以根據(jù)需要擴展JUnit功能可以將測試代碼和產(chǎn)品代碼分開測試代碼編寫容易,功能強大自動檢驗結(jié)果并且提供立即的反饋易于集成到開發(fā)的構(gòu)建過程中,在軟件的構(gòu)建過程中完成對程序的單元測試測試包結(jié)構(gòu)便于組織和集成運行,支持圖形交互模式和文本交互模式內(nèi)容提要7.1Junit簡介7.1.1Junit簡介7.1.2Junit的安裝

7.2Junit框架7.2.1

軟件自動化測試框架7.2.2JUnit核心類及接口7.2.3JUnit單元測試的步驟

7.3Eclipse中Junit的使用7.1.2Junit的安裝Java的JUnit網(wǎng)上免費下載地址http:///projects/junit/7.1.2Junit的安裝解包JUnit:

文件/目錄描述junit.jarJUnit框架結(jié)構(gòu)、擴展和測試運行器的二進(jìn)制發(fā)布src.jarJUnit的源代碼,包括一個

Ant的buildfile文件junit是個目錄,內(nèi)有JUnit自帶的用JUnit編寫的測試示例程序javadocJUnit完整的API文檔doc一些文檔和文章,包括“TestInfected:ProgrammersLoveWritingTests”和其它一些資料,可以幫助我們?nèi)腴T。7.1.2Junit的安裝要安裝和使用JUnit是很容易的,只需三個步驟:(1)下載JUnit軟件(junit4.10.zip);(2)將下載的junit.zip解壓到你指定的目錄(C:\junit4.10)(3)設(shè)置環(huán)境變量Variable:CLASSPATHVariableValue:.;InstallPath/junit.jar(.;C:\junit4.10\junit-4.10.jar)7.1.2Junit的安裝測試運行(進(jìn)入命令提示符安裝目錄下)javajunit.textui(swingui,awtui).TestRunnerjunit.samples.AllTests內(nèi)容提要7.1Junit簡介7.1.1Junit簡介7.1.2Junit的安裝

7.2Junit框架7.2.1

軟件自動化測試框架7.2.2JUnit核心類及接口7.2.3JUnit單元測試的步驟

7.3Eclipse中Junit的使用內(nèi)容提要7.1Junit簡介7.1.1Junit簡介7.1.2Junit的安裝

7.2Junit框架7.2.1

軟件自動化測試框架7.2.2JUnit核心類及接口7.2.3JUnit單元測試的步驟

7.3Eclipse中Junit的使用7.2.1軟件自動化測試框架Junit框架是一個典型composite模式,TestSuite可以容納任何派生自test的對象,當(dāng)調(diào)用TestSuite對象run()方法時,會遍歷自己容納的對象,逐個調(diào)用它們的run()方法。TestCase:測試用例,是對測試目標(biāo)進(jìn)行測試的方法和過程集合TestSuite:測試包,是測試用例的集合,可容納多個測試用例;TestResult:測試結(jié)果的描述記錄;TestListener:測試過程中的事件監(jiān)聽者。7.2.1軟件自動化測試框架7.2.1軟件自動化測試框架每個測試方法所發(fā)生與預(yù)期不一致的狀況描述,稱其測試失敗元素(TestFailure)。其中TestCase是框架的核心,它建立了TestCase和TestSuite之間的關(guān)聯(lián),為整個框架做了擴展預(yù)留。其余的類用來支援TestCase,TestSuite用來聚合多個TestCase,Assert類實現(xiàn)期望值(expected)和實際值(actual)的驗證,TestResult收集所有測試用例執(zhí)行的后果。內(nèi)容提要7.1Junit簡介7.1.1Junit簡介7.1.2Junit的安裝

7.2Junit框架7.2.1

軟件自動化測試框架7.2.2JUnit核心類及接口7.2.3JUnit單元測試的步驟

7.3Eclipse中Junit的使用JUnit核心類及接口(1)JUnit核心類及接口(2)TestRunner(測試運行器)沒有TestRunner接口,只有一個所有TestRunner都繼承的BaseTestRunner執(zhí)行測試并提供相關(guān)的結(jié)果的統(tǒng)計信息包含三個TestRunner類一個用于文本控制臺一個用于Swing還有一個AWT(遺產(chǎn)代碼,很少有人用)JUnit核心類及接口(3)TestRunner(測試運行器)實際運用中的SwingtestrunnerGreenbar通過測試Redbar測試失敗JUnit核心類及接口(3)JUnit核心類及接口(3)JUnit核心類及接口(4)TestCase(測試用例)用抽象類來定義測試中的固定方法。TestCase是Test接口的抽象實現(xiàn)。Test接口是運行和收集測試的結(jié)果,它使用了Composite設(shè)計模式,Test接口定義了兩個方法:PublicintcountTestCase():統(tǒng)計執(zhí)行測試用例(TestCase)的數(shù)量。如果是測試包則返回整個包中所有測試用例的統(tǒng)計值。Publicvoidrun(TestResult):TestResult參數(shù)用來啟動測試,記錄測試過程JUnit核心類及接口(5)TestCase(測試用例)把具有公共行為的測試歸入一組擴展了JUnit的TestCase類的類。它以testXXX方法的形式包含一個或多個測試典型的TestCase包含兩個主要部件Fixture測試固件釋放資源,一個測試用例可以包含若干個testXxx()測試方法,測試用例測試一個或多個類API接口的正確性,當(dāng)然在調(diào)用類API時,需要事先創(chuàng)建這個類的對象及一些關(guān)聯(lián)的對象,這組對象就稱為測試固件(Fixture),相當(dāng)于測試用例的“工作對象”單元測試JUnit核心類及接口(6)TestCase(測試用例)Fixture管理資源,復(fù)用配置代碼運行一個或多個測試所需的公用資源或者數(shù)據(jù)集合TestCase通過setUp和tearDown方法來創(chuàng)建和銷毀fixture典型應(yīng)用數(shù)據(jù)庫連接,生成輸入文件JUnit核心類及接口(7)TestCase(測試用例)創(chuàng)建單元測試方法繼承自TestCase的一組assert方法封裝了最常見的測試任務(wù),這些assert方法可以極大地簡化單元測試的編寫Assert超類所提供的8個核心方法JUnit核心類及接口(8)TestCase(測試用例)創(chuàng)建單元測試方法除了Assert提供的方法之外,TestCase還實現(xiàn)了10個它自己的方法coutTestCases,CreateResult,getName,run,runBare,setName,setup,teardown,toStringTestCase的10個自己的方法JUnit核心類及接口(9)TestCase(測試用例)這18個方法共同為你提供了使用JUnit編寫測試的全部功能一個簡單的實例(1)publicclassSampleCaculator{ //計算兩整數(shù)之和

publicintadd(intaugend,intaddend){ returnaugend+addend; } //計算兩整數(shù)之差

publicintsubtration(intminuend,intsubtrahend){ returnminuend-subtrahend; }}一個簡單的實例(2)importjunit.framework.*;publicclassSampleCaculatorTestextendsTestCase{ SampleCalculatorcalculator=newSampleCalculator(); publicvoidtestAdd(){ intresult=calculator.add(50,20); assertEquals(70,result); } publicvoidtestSubtration(){ intresult=calculator.subtration(50,20); assertEquals(30,result); }}編寫TestCase子類注意事項:編寫TestCase的子類時,需要注意以下事項:編寫的測試類必須繼承于TestCase抽象類一次測試只測試一個對象,一個測試方法之測試一個對象中的方法最好在Assert函數(shù)中給出失敗的原因,這樣有助于查錯在setUp和tearDown中的代碼不應(yīng)該與測試有關(guān),而應(yīng)與全局有關(guān)擴展了JUnit的TestCase類的類。它以testXXX方法的形式包含一個或多個測試方法Junit測試過程TestCase實例被運行時,依照以下步驟運行:

1.創(chuàng)建測試用例的實例。

2.調(diào)用setUp()方法,執(zhí)行一些初始化工作

3.運行testXxx()測試方法。

4.調(diào)用tearDown()方法,執(zhí)行銷毀對象。JUnit核心類及接口(10)TestSuite(測試集合)testsuite是把多個相關(guān)測試歸入一組便捷方式若你沒有提供自己的TestSuite,testrunner會自動創(chuàng)建一個缺省的TestSuite不能滿足時,可能會想組合多個suite,把它們作為主suite的一部分,這些suite來自幾個不同的packageJUnit核心類及接口(11)TestSuite(測試集合)通常情況下TestAll類僅僅包括一個靜態(tài)的suite方法,這個方法會注冊應(yīng)用程序需要定期執(zhí)行的所有Test對象(包括TestCase對象和TestSuite對象),下面是一個典型的TestAll類TestAll類importjunit.framework.Test;importjunit.framework.TestSuite;importjunitbook.sampling.TestDefaultController;publicclassTestAllextendTestCase{publicstaticTestsuite(){TestSuitesuite=newTestSuite("Alltestsfrompart1");suite.addTestSuite(SampleCaculatorTest.class);suite.addTestSuite(TestDefaultController.class);returnsuite;}}TestSuite處理測試用例的6個公約測試用例必須是共有類(Public)測試用例必須繼承于TestCase類測試用例的測試方法必須是共有的(Public)測試用例的測試方法必須被聲明為Void測試用例的測試方法的前置名詞必須是Test測試用例的測試方法無任何傳遞參數(shù)JUnit核心類及接口(12)TestResult所有的TestSuite都有一個對應(yīng)的TestResult負(fù)責(zé)收集TestCase的執(zhí)行結(jié)果。儲存了所有測試的詳細(xì)情況,是通過還是失敗。失敗則會創(chuàng)建一個TestFailure對象TestRunner使用TestResult來報告測試結(jié)果。沒有TestFailure對象進(jìn)度條就用綠色,否則進(jìn)度條用紅色并輸出失敗測試的數(shù)目和他們的stacktrace,將測試結(jié)果轉(zhuǎn)發(fā)到TestListener處理JUnit核心類及接口(13)TestResultJUnit區(qū)分失敗和錯誤失?。菏强梢灶A(yù)期的,代碼的改變不時會造成斷言失敗,你只要修正代碼,斷言就可以再次通過錯誤:比如常規(guī)程序拋出的異常,則是測試時不可預(yù)料的JUnit核心類及接口(14)TestListener幫助對象訪問TestResult并創(chuàng)建有用的報告。雖然Testlistener接口是JUnit框架的重要部分,但是你編寫自己的測試時不必實現(xiàn)這個接口。只有需要擴展JUnit框架時才會需要實現(xiàn)這個接口TestFailure是“失敗”狀況的收集類,解釋每次測試執(zhí)行過程中出現(xiàn)的異常情況。其toString()方法返回“失敗”狀況的簡要描述內(nèi)容提要7.1Junit簡介7.1.1Junit簡介7.1.2Junit的安裝

7.2Junit框架7.2.1

軟件自動化測試框架7.2.2JUnit核心類及接口7.2.3JUnit單元測試的步驟

7.3Eclipse中Junit的使用JUnit單元測試的步驟創(chuàng)建一個繼承自junit.framework.TestCase的類創(chuàng)建一個以“test”名字開頭的publicvoid方法Ex:publicvoidtestDeleteCustomer()使用諸如assertEquals()的方法測試執(zhí)行結(jié)果JUnit單元測試的步驟(1)JUnit成員三重唱,共同產(chǎn)生測試結(jié)果當(dāng)你需要編寫更多的TestCase的時候,你可以創(chuàng)建更多的TestCase對象。當(dāng)你需要一次執(zhí)行多個TestCase對象的時候,您可以創(chuàng)建一個TestSuite對象或使用缺省的TestSuite對象進(jìn)行封裝。為了執(zhí)行TestSuite,需要使用TestRunner。通過TestRunner的執(zhí)行生成TestResult對象JUnit單元測試的步驟(2)重載setUp(),封裝測試環(huán)境初始化及測試數(shù)據(jù)準(zhǔn)備設(shè)計測試方法,以testXXX命名在測試方法中使用斷言方法如assertEquals(),assertTrue()等設(shè)計測試套件,或使用缺省的測試套件,調(diào)用TestRunner執(zhí)行測試腳本,生成測試結(jié)果重載tearDown()析構(gòu)測試環(huán)境,執(zhí)行收尾動作待測類public

class

Calculator{public

int

add(inta,intb){ returna+b;}public

int

minus(inta,intb){ returna-b;}public

int

multiply(inta,intb){ returna*b;}public

int

divide(inta,intb)throwsException{if(0==b){ throw

newException("除數(shù)不能為零!");}returna/b;}}該類的測試類[1/4]public

class

CalculatorTest

extends

TestCase{ privateCalculatorcal; public

void

setUp(){ cal=newCalculator(); } public

void

tearDown(){

}測試類必須以TestCase為父類

每個測試方法執(zhí)行前都會調(diào)用該方法析構(gòu)測試環(huán)境,執(zhí)行收尾動作生成對象該類的測試類[2/4]

public

void

testAdd(){

intresult=cal.add(1,2);

Assert.assertEquals

(3,result); } public

void

testMinus(){

intresult=cal.minus(1,2);

Assert.assertEquals(-1,result); } public

void

testMultiply(){

intresult=cal.multiply(2,3);

Assert.assertEquals(6,result);

}Junit4測試方法需滿足:1)Public的2)Void的3)無方法參數(shù)4)方法名稱必須以test開頭斷言調(diào)用該方法該類的測試類[3/4]

public

void

testDivide(){

intresult=0; try{ result=cal.divide(6,4); } catch(Exceptione){

e.printStackTrace();

Assert.fail(); }

Assert.assertEquals(1,result);

}期望該行代碼永遠(yuǎn)不會被執(zhí)行,斷言失敗,停止執(zhí)行立即失敗該類的測試類[4/4]

public

void

testDivide2(){

Throwable

tx=null; try{ cal.divide(4,0); Assert.fail();

}

catch(Exceptionex){

tx=ex; }

Assert.assertNotNull(tx);

Assert.assertEquals(Exception.class,tx.getClass());

Assert.assertEquals("除數(shù)不能為零!",tx.getMessage()); }}一個方法可以有多個測試方法,輸入的不同情況會有不同的testcase出現(xiàn)tx是Exception類型的一旦發(fā)生異常,則tx一定不為空期望該行代碼永遠(yuǎn)不會被執(zhí)行,斷言失敗,停止執(zhí)行立即失敗同時測試多個類(1)現(xiàn)有兩個測試類CalculatorTest.javaLargestTest.java如何一下全部運行?如何自動化測試?同時測試多個類(2)public

class

TestAll

extends

TestCase{ public

staticTestsuite() {

TestSuitesuite=new

TestSuite();

suite.addTestSuite(CalculatorTest.class);

suite.addTestSuite(LargestTest.class); return

suite; }}必須是static返回一個Test類型方法名必須是suite生成一個TestSuite測試類對應(yīng)的class對象,還可增加TestSuite的對象返回suite,TestSuite

實現(xiàn)了Test接口內(nèi)容提要7.1Junit簡介7.1.1Junit簡介7.1.2Junit的安裝

7.2Junit框架7.2.1

軟件自動化測試框架7.2.2JUnit核心類及接口7.2.3JUnit單元測試的步驟

7.3Eclipse中Junit的使用7.3Eclipse中Junit的使用首先新建一個項目叫JUnit_Test,我們編寫一個Calculator類,這是一個能夠簡單實現(xiàn)加減乘除、平方、開方的計算器類,然后對這些功能進(jìn)行單元測試。這個類并不是很完美,我們故意保留了一些Bug用于演示,這些Bug在注釋中都有說明。該類代碼如下:package.chu;publicclassCalculator{privatestaticintresult;//靜態(tài)變量,用于存儲運行結(jié)果

publicvoidadd(intn){

result=result+n;}publicvoidsubstract(intn){

result=result-1;//Bug:正確的應(yīng)該是result=result-n}publicvoidmultiply(intn){}//此方法尚未寫好

publicvoiddivide(intn){

result=result/n;}publicvoidsquare(intn){

result=n*n;}publicvoidsquareRoot(intn){for(;;);//Bug:死循環(huán)

}publicvoidclear(){//將結(jié)果清零

result=0;}publicintgetResult(){returnresult;}}在Eclipse下使用JUnit(1)單元測試代碼把它和被測試代碼混在一起,這顯然會照成混亂建議您分別為單元測試代碼與被測試代碼創(chuàng)建單獨的目錄,并保證測試代碼和被測試代碼使用相同的包名。這樣既保證了代碼的分離,同時還保證了查找的方便遵照這條原則,我們在項目JUnit_Test根目錄下添加一個新目錄testsrc,并把它加入到項目源代碼目錄中在Eclipse下使用JUnit(2)將JUnit4單元測試包引入這個項目:在該項目上點右鍵,點“屬性”,如圖:第二步,將JUnit4單元測試包引入這個項目:在該項目上點右鍵,點“屬性”,如圖:在彈出的屬性窗口中,首先在左邊選擇“JavaBuildPath”,然后到右上選擇“Libraries”標(biāo)簽,之后在最右邊點擊“AddLibrary…”按鈕,如下圖所示:然后在新彈出的對話框中選擇JUnit4并點擊確定,如上圖所示,JUnit4軟件包就被包含進(jìn)我們這個項目了。在Eclipse下使用JUnit(3)在類上右擊,選擇“new”->“JUnitTestCase”新建一個CalculatorTest類,用來測試Calculator類選擇剛剛建立的文件夾“JUnit_Test/testscr”,選中setUp()和tearDown(),然后點擊“Next”選擇要測試的方法,我們僅對“加、減、乘、除”四個方法進(jìn)行測試點擊“finish”,跳出需要添加JUnit.jar包,點擊“OK”在Eclipse下使用JUnit(4)之后系統(tǒng)會自動生成一個新類CalculatorTest,里面包含一些空的測試用例。你只需要將這些測試用例稍作修改即可使用。完整的CalculatorTest代碼如下:package.chu;importstaticorg.junit.Assert.*;importorg.junit.After;importorg.junit.Before;importorg.junit.Ignore;importorg.junit.Test;publicclassCalculatorTest{privatestaticCalculatorcalculator=newCalculator();@BeforepublicvoidsetUp()throwsException{

calculator.clea

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論