




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第11章 單元測試JUnit本章學(xué)習(xí)目標(biāo)本章要達(dá)到的主要目標(biāo):理解單元測試的概念;了解JUnit單元測試基礎(chǔ);熟悉JUnit 中常用的類;掌握Eclipse中JUnit 的配置;了解在Eclipse中使用JUnit 進(jìn)行測試。軟件測試背景在軟件開發(fā)過程中,除了調(diào)試之外,還需要進(jìn)行測試。調(diào)試和測試是不同的概念,調(diào)試是對(duì)成品進(jìn)行試運(yùn)行,而測試則是在組裝成成品之前,利用一些工具,參照某些標(biāo)準(zhǔn),對(duì)零部件進(jìn)行檢測。在Java開發(fā)中,使用率最高的測試工具是JUnit。JUnit背景JUnit是由 Erich Gamma 和 Kent Beck 編寫的一個(gè)回歸測試框架(regression testing
2、framework),供Java開發(fā)人員編寫單元測試之用。JUnit測試是程序員測試,即所謂白盒測試,因?yàn)槌绦騿T知道被測試的軟件如何(How)完成功能和完成什么樣(What)的功能。JUnit本質(zhì)上是一套框架,即開發(fā)者制定了一套條條框框,遵循要求編寫測試代碼,如繼承某個(gè)類,實(shí)現(xiàn)某個(gè)接口,就可以用JUnit進(jìn)行自動(dòng)測試了。由于JUnit相對(duì)獨(dú)立于所編寫的代碼,測試代碼的編寫可以先于實(shí)現(xiàn)代碼的編寫,使得“極限開發(fā)”中推崇的“test first design”的實(shí)現(xiàn)有了現(xiàn)成的手段:用JUnit寫測試代碼,寫實(shí)現(xiàn)代碼,運(yùn)行測試,測試失敗,修改實(shí)現(xiàn)代碼,再運(yùn)行測試,直到測試成功。以后對(duì)代碼的修改和優(yōu)化
3、,運(yùn)行測試成功,則修改成功。JUnit簡介JUnit是一個(gè)開源的java單元測試框架。正如:“麻雀雖小,五臟俱全?!保琂Unit功能非常強(qiáng)大:(1)提供的API可以讓用戶寫出測試結(jié)果明確的可重用單元測試用例。(2)提供了三種方式來顯示用戶的測試結(jié)果,而且還可以擴(kuò)展。(3)提供了單元測試用例成批運(yùn)行的功能。(4)超輕量級(jí)而且使用簡單,沒有商業(yè)性的欺騙和無用的向?qū)?。?)整個(gè)框架設(shè)計(jì)良好,易擴(kuò)展。對(duì)不同性質(zhì)的被測對(duì)象,如Class, Jsp, Servlet, Ejb等,JUnit有不同的支持方式。本節(jié)僅以Class測試為例。JUnit和Eclipse的關(guān)系前面提到了JUnit的作者Erich G
4、amma,他同時(shí)還負(fù)責(zé)了Eclipse的開發(fā),包括JFace的開發(fā)和JDT中一些工具的開發(fā)。Kent Beck則是極限開發(fā)的倡導(dǎo)者,Eclipse中的不少開發(fā)工具都體現(xiàn)了極限開發(fā)的思想。Erich Gamma和Kent Beck在Eclipse項(xiàng)目的早期,寫了多本關(guān)于Eclipse的圖書,推動(dòng)了Eclipse的普及。Eclipse具有一個(gè)JUnit插件,這個(gè)插件已經(jīng)包含在JDT中,實(shí)現(xiàn)了JUnit的GUI界面。這個(gè)界面由JUnit視圖實(shí)現(xiàn)。JUnit配置由于Eclipse中集成了JUnit,所以不必下載,如果想要最新的JUnit類庫可以在互聯(lián)網(wǎng)上下載,之后在Eclipse構(gòu)建路徑中添加JUni
5、t類庫即可。下面介紹一下Eclipse中如何配置JUnit。(1)右鍵單擊項(xiàng)目“WebApplication”,選擇“Build Path”“Configure Build Path”菜單命令,彈出構(gòu)建路徑對(duì)話框,選擇“Libraries”選項(xiàng),如圖所示。JUnit配置(2)單擊“Add External JARs”可以添加額外的JUnit類庫。單擊“Add Library”添加Eclipse中自帶的JUnit類庫,如圖所示。JUnit配置(3)選擇“Junit”,單擊“Next”按鈕,出現(xiàn)添加類庫對(duì)話框,在“JUnit library version”一欄中有“JUnit 3”和“JUnit
6、 4”兩個(gè)選項(xiàng),本例中選擇“JUnit 4”如圖所示。JUnit配置(4)單擊“Finish”按鈕,完成JUnit類庫的添加。如圖所示,JUnit類庫已經(jīng)加入當(dāng)前項(xiàng)目中了。JUnit配置(5)單擊“OK”按鈕完成。此時(shí)在包資源管理器視圖(Package Explorer)中可以看到JUnit類庫信息,如圖所示。準(zhǔn)備要測試的類例如,在項(xiàng)目中建立一個(gè)新的類Money。新建單元測試一個(gè)單元測試用例也是一個(gè)類。往往對(duì)應(yīng)一個(gè)特定的待測類。在JDT中建立單元測試是非常簡單的。輸入測試代碼下面試著寫一段測試代碼。如下面代碼那樣,修改testAdd()方法,加入測試的代碼。測試的過程是:先建立兩個(gè)Money對(duì)
7、象,分別是m12CHF、m14CHF。m12CHF的數(shù)值是12,m14CHF的數(shù)值是14。調(diào)用m12CHF的add方法,與m14CHF相加,得出一個(gè)新的Money對(duì)象result。最后用assertTrue方法,驗(yàn)證得出的result的值是否與預(yù)期的expected對(duì)象的值相等。運(yùn)行測試代碼運(yùn)行單元測試修改完成后,就可以試一下運(yùn)行測試用例了。運(yùn)行測試用例也是Run命令,通過工具欄上的Run按鈕執(zhí)行。查看單元測試的結(jié)果單元測試一旦執(zhí)行,測試的結(jié)果就可以在JUnit視圖上清晰地展現(xiàn)出來。編寫JUnit單元測試實(shí)例編輯類文件:新建一個(gè)類文件JUnitExample .java ,該類中只有一個(gè)方法s
8、peak(),返回字符串“Hello World!”,代碼如下。 package com.myjunit.example;public class JUnitExample /待測試的方法,返回字符串“Hello world!”public String speak() return Hello world!;創(chuàng)建TestCase測試類現(xiàn)在開發(fā)JUnit的“Hello World!”例子。(1)建立測試。在工程上單擊右鍵,選擇“New”“Other”菜單命令,展開“Java”選項(xiàng),選擇“JUnit”“JUnit Test Case”,如圖所示。創(chuàng)建TestCase測試類(2)單擊“Next”按
9、鈕,彈出新建JUnit測試案例對(duì)話框。在“Name”一欄中填入測試案例的名字 “TestGetHelloWorldPrompt”, 在“Class under test”中填入將要被測試的類“com.myjunit.example.JUnitExample”。如圖所示。創(chuàng)建TestCase測試類(3)單擊“Next”按鈕,彈出選擇待測試方法對(duì)話框,選擇“JUnitExample”類的“speak()”方法,單擊“Finish”按鈕完成。編輯“TestGetHelloWorldPrompt”類代碼如下。package com.myjunit.test;import junit.framework
10、.TestCase;import com.myjunit.example.JUnitExample;public class TestGetHelloWorldPrompt extends TestCasepublic void setUp() throws Exception /初始化public void tearDown() throws Exception /撤銷初始化public void testSpeak() /構(gòu)造類JUnitExample的實(shí)例測試JUnitExample jue = new JUnitExample();/assertEquals方法是JUnit提供的輔助函
11、數(shù),用于幫助確定某個(gè)被測試的函數(shù)是/否正常工作,稱為“斷言”。assertEquals(expected,actual):expected是/期望值,actual是被測試代碼實(shí)際產(chǎn)生的值assertEquals(Hello zzu!, jue.speak(); 運(yùn)行TestCase測試類右鍵單擊工程,選擇“Run As”“JUnit Test”選項(xiàng),出現(xiàn)JUnit視圖,如圖所示。運(yùn)行TestCase測試類可以看到JUnit視圖中出現(xiàn)一個(gè)紅條,“Failures”為1,說明測試失敗了,查看失敗原因可以在“Failure Trace”中查找信息。如圖所示,說明測試數(shù)據(jù)與實(shí)際數(shù)據(jù)不一致,導(dǎo)致測試失敗
12、。比較測試數(shù)據(jù)與實(shí)際數(shù)據(jù)修改TestCase測試類下面,我們修改“JUnitExample”類中的“speak”方法,代碼如下。package com.myjunit.example;public class JUnitExample / 待測試的方法,返回字符串“Hello zzu!”public String speak() return Hello zzu!;運(yùn)行TestCase測試類再次運(yùn)行測試。JUnit視圖中出現(xiàn)一個(gè)綠條,表明測試成功。成批運(yùn)行TestCase測試類新建一個(gè)“JUnit Test Suite”類,名稱為“AllTests”,代碼如下。package com.myju
13、nit.example;import org.junit.runner.RunWith;import org.junit.runners.Suite;import org.junit.runners.Suite.SuiteClasses;RunWith(Suite.class)SuiteClasses( TestGetHelloWorldPrompt.class )SuiteClasses( 其他測試類.class )public class AllTests package com.myjunit.test;import junit.framework.Test;import junit.f
14、ramework.TestCase;import junit.framework.TestSuite;public class AllTests public static Test suite() /構(gòu)造TestSuite類,可以不帶參數(shù)TestSuite suite = new TestSuite(Test for com.myjunit.test);/$JUnit-BEGIN$/*此處可以添加多個(gè)JUnit test。本例中只是使用了前面的一個(gè)測試?yán)?。運(yùn)行AllTests時(shí)就可以測試多個(gè)JUnit test,測試失敗的JUnit test不會(huì)影響其他的JUnit test測試*/ su
15、ite.addTestSuite(TestGetHelloWorldPrompt.class);/*suite.addTestSuite(其他測試類.class);*/$JUnit-END$return suite;成批運(yùn)行TestCase測試類右鍵單擊類“AllTests”,選擇“Run As”“JUnit Test”菜單命令,結(jié)果如圖所示。JUnit知識(shí)要點(diǎn)1JUnit中的初始化與撤銷在“TestGetHelloWorldPrompt”類中,我們可以看到有setUp與tearDown兩個(gè)方法,這兩個(gè)方法是junit framework.TestCase中提供初始化和反初始化每個(gè)測試的方法。
16、setUp方法:在每個(gè)測試方法調(diào)用前被調(diào)用,負(fù)責(zé)初始化測試方法所需要的測試環(huán)境;tearDown方法:在每個(gè)測試方法被調(diào)用之后被調(diào)用,負(fù)責(zé)撤銷測試環(huán)境。它們與測試方法的關(guān)系可以描述如下:測試開始setUptestXXXtearDown測試結(jié)束。在setUp和tearDown中的代碼是不應(yīng)該與測試方法相關(guān)的,而應(yīng)該是全局相關(guān)的。例如對(duì)于測試方法A和B,在setUp和tearDown中的代碼應(yīng)該是A和B都需要的代碼。2JUnit的各種斷言JUnit為我們提供了一些輔助函數(shù),它們用來幫助我們確定被測試的方法是否按照預(yù)期的效果正常工作,通常,把這些輔助函數(shù)稱為斷言。下面介紹一下JUnit的各種斷言。a
17、ssertEquals函數(shù)原型1:assertEquals(String message,expected,actual)參數(shù)說明:message是一個(gè)可選的消息,如果提供,將會(huì)在發(fā)生錯(cuò)誤時(shí)報(bào)告這個(gè)消息。 expected是期望值,通常都是用戶指定的內(nèi)容。 actual是被測試的代碼返回的實(shí)際值。函數(shù)原型2:assertEquals(String message,expected,actual,tolerance)參數(shù)說明:message是一個(gè)可選的消息,如果提供,將會(huì)在發(fā)生錯(cuò)誤時(shí)報(bào)告這個(gè)消息。 expected是期望值,通常都是用戶指定的內(nèi)容。 actual是被測試的代碼返回的實(shí)際值。 to
18、lerance是誤差參數(shù),參加比較的兩個(gè)浮點(diǎn)數(shù)在這個(gè)誤差之內(nèi)則會(huì)被認(rèn)為是相等的。JUnit知識(shí)要點(diǎn)assertTrue函數(shù)原型:assertTrue (String message,Boolean condition)參數(shù)說明:message是一個(gè)可選的消息,如果提供,將會(huì)在發(fā)生錯(cuò)誤時(shí)報(bào)告這個(gè)消息。 condition是待驗(yàn)證的布爾型值。該斷言用來驗(yàn)證給定的布爾型值是否為真,如果結(jié)果為假,則驗(yàn)證失敗。當(dāng)然,還有驗(yàn)證為假的測試條件:函數(shù)原型:assertFalse(String message,Boolean condition)該斷言用來驗(yàn)證給定的布爾型值是否為假,如果結(jié)果為真,則驗(yàn)證失敗。a
19、ssertNull函數(shù)原型:assertNull(String message,Object object)參數(shù)說明:message是一個(gè)可選的消息,如果提供,將會(huì)在發(fā)生錯(cuò)誤時(shí)報(bào)告這個(gè)消息。 object是待驗(yàn)證的對(duì)象。該斷言用來驗(yàn)證給定的對(duì)象是否為null,如果不為null,則驗(yàn)證失敗。相應(yīng)地,還存在可以驗(yàn)證非null的斷言:函數(shù)原型:assertNotNull(String message,Object object)該斷言用來驗(yàn)證給定的對(duì)象是否為非null,如果為null,則驗(yàn)證失敗。JUnit知識(shí)要點(diǎn)assertSame函數(shù)原型:assertSame (String message, expected,actual)參數(shù)說明:message是一個(gè)可選的消息,如果提供,將會(huì)在發(fā)生錯(cuò)誤時(shí)報(bào)告這個(gè)消息。 expected是期望值。 actual是被測試的代碼返回的實(shí)際值。該斷言用來驗(yàn)證expected參數(shù)和actual參數(shù)所引用的是否是同一個(gè)對(duì)象,如果不是,則驗(yàn)證失敗。相應(yīng)地,也
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 度品牌推廣服務(wù)合同協(xié)議書范
- 借款合同抵押貸款合同
- 勞動(dòng)合同合同類型和期限
- 化工運(yùn)輸服務(wù)合同
- 回遷房子買賣合同
- 外賣送貨員勞務(wù)雇傭合同協(xié)議書
- 安裝太陽能施工合同書
- 投資股份合同書(2025年版)
- 機(jī)械攤位銷售合同范本
- 新房無證轉(zhuǎn)讓合同范本
- 德能勤績廉個(gè)人總結(jié)的
- 二年級(jí)美術(shù)上冊課件 《3.我的手印畫》 贛美版 (共18張PPT)
- Q∕SY 126-2014 油田水處理用緩蝕阻垢劑技術(shù)規(guī)范
- GB∕T 3216-2016 回轉(zhuǎn)動(dòng)力泵 水力性能驗(yàn)收試驗(yàn) 1級(jí)、2級(jí)和3級(jí)
- 電子電氣評(píng)估規(guī)范-最新
- 全國青少年機(jī)器人技術(shù)等價(jià)考試三級(jí)全套課件
- 適老化改造培訓(xùn)課件(PPT 31頁)
- 黑布林繪本 Dad-for-Sale 出售爸爸課件
- 腹腔鏡下肝葉切除術(shù)(實(shí)用課件)
- 三菱M70數(shù)控系統(tǒng)以太網(wǎng)應(yīng)用
- 光伏并網(wǎng)逆變器調(diào)試報(bào)告正式版
評(píng)論
0/150
提交評(píng)論