Eclipse軟件開發(fā)工具:第11章 單元測試JUnit_第1頁
Eclipse軟件開發(fā)工具:第11章 單元測試JUnit_第2頁
Eclipse軟件開發(fā)工具:第11章 單元測試JUnit_第3頁
Eclipse軟件開發(fā)工具:第11章 單元測試JUnit_第4頁
Eclipse軟件開發(fā)工具:第11章 單元測試JUnit_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第11章 單元測試JUnit本章學習目標本章要達到的主要目標:理解單元測試的概念;了解JUnit單元測試基礎;熟悉JUnit 中常用的類;掌握Eclipse中JUnit 的配置;了解在Eclipse中使用JUnit 進行測試。軟件測試背景在軟件開發(fā)過程中,除了調(diào)試之外,還需要進行測試。調(diào)試和測試是不同的概念,調(diào)試是對成品進行試運行,而測試則是在組裝成成品之前,利用一些工具,參照某些標準,對零部件進行檢測。在Java開發(fā)中,使用率最高的測試工具是JUnit。JUnit背景JUnit是由 Erich Gamma 和 Kent Beck 編寫的一個回歸測試框架(regression testing

2、framework),供Java開發(fā)人員編寫單元測試之用。JUnit測試是程序員測試,即所謂白盒測試,因為程序員知道被測試的軟件如何(How)完成功能和完成什么樣(What)的功能。JUnit本質(zhì)上是一套框架,即開發(fā)者制定了一套條條框框,遵循要求編寫測試代碼,如繼承某個類,實現(xiàn)某個接口,就可以用JUnit進行自動測試了。由于JUnit相對獨立于所編寫的代碼,測試代碼的編寫可以先于實現(xiàn)代碼的編寫,使得“極限開發(fā)”中推崇的“test first design”的實現(xiàn)有了現(xiàn)成的手段:用JUnit寫測試代碼,寫實現(xiàn)代碼,運行測試,測試失敗,修改實現(xiàn)代碼,再運行測試,直到測試成功。以后對代碼的修改和優(yōu)化

3、,運行測試成功,則修改成功。JUnit簡介JUnit是一個開源的java單元測試框架。正如:“麻雀雖小,五臟俱全?!?,JUnit功能非常強大:(1)提供的API可以讓用戶寫出測試結果明確的可重用單元測試用例。(2)提供了三種方式來顯示用戶的測試結果,而且還可以擴展。(3)提供了單元測試用例成批運行的功能。(4)超輕量級而且使用簡單,沒有商業(yè)性的欺騙和無用的向?qū)?。?)整個框架設計良好,易擴展。對不同性質(zhì)的被測對象,如Class, Jsp, Servlet, Ejb等,JUnit有不同的支持方式。本節(jié)僅以Class測試為例。JUnit和Eclipse的關系前面提到了JUnit的作者Erich G

4、amma,他同時還負責了Eclipse的開發(fā),包括JFace的開發(fā)和JDT中一些工具的開發(fā)。Kent Beck則是極限開發(fā)的倡導者,Eclipse中的不少開發(fā)工具都體現(xiàn)了極限開發(fā)的思想。Erich Gamma和Kent Beck在Eclipse項目的早期,寫了多本關于Eclipse的圖書,推動了Eclipse的普及。Eclipse具有一個JUnit插件,這個插件已經(jīng)包含在JDT中,實現(xiàn)了JUnit的GUI界面。這個界面由JUnit視圖實現(xiàn)。JUnit配置由于Eclipse中集成了JUnit,所以不必下載,如果想要最新的JUnit類庫可以在互聯(lián)網(wǎng)上下載,之后在Eclipse構建路徑中添加JUni

5、t類庫即可。下面介紹一下Eclipse中如何配置JUnit。(1)右鍵單擊項目“WebApplication”,選擇“Build Path”“Configure Build Path”菜單命令,彈出構建路徑對話框,選擇“Libraries”選項,如圖所示。JUnit配置(2)單擊“Add External JARs”可以添加額外的JUnit類庫。單擊“Add Library”添加Eclipse中自帶的JUnit類庫,如圖所示。JUnit配置(3)選擇“Junit”,單擊“Next”按鈕,出現(xiàn)添加類庫對話框,在“JUnit library version”一欄中有“JUnit 3”和“JUnit

6、 4”兩個選項,本例中選擇“JUnit 4”如圖所示。JUnit配置(4)單擊“Finish”按鈕,完成JUnit類庫的添加。如圖所示,JUnit類庫已經(jīng)加入當前項目中了。JUnit配置(5)單擊“OK”按鈕完成。此時在包資源管理器視圖(Package Explorer)中可以看到JUnit類庫信息,如圖所示。準備要測試的類例如,在項目中建立一個新的類Money。新建單元測試一個單元測試用例也是一個類。往往對應一個特定的待測類。在JDT中建立單元測試是非常簡單的。輸入測試代碼下面試著寫一段測試代碼。如下面代碼那樣,修改testAdd()方法,加入測試的代碼。測試的過程是:先建立兩個Money對

7、象,分別是m12CHF、m14CHF。m12CHF的數(shù)值是12,m14CHF的數(shù)值是14。調(diào)用m12CHF的add方法,與m14CHF相加,得出一個新的Money對象result。最后用assertTrue方法,驗證得出的result的值是否與預期的expected對象的值相等。運行測試代碼運行單元測試修改完成后,就可以試一下運行測試用例了。運行測試用例也是Run命令,通過工具欄上的Run按鈕執(zhí)行。查看單元測試的結果單元測試一旦執(zhí)行,測試的結果就可以在JUnit視圖上清晰地展現(xiàn)出來。編寫JUnit單元測試實例編輯類文件:新建一個類文件JUnitExample .java ,該類中只有一個方法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”選項,選擇“JUnit”“JUnit Test Case”,如圖所示。創(chuàng)建TestCase測試類(2)單擊“Next”按

9、鈕,彈出新建JUnit測試案例對話框。在“Name”一欄中填入測試案例的名字 “TestGetHelloWorldPrompt”, 在“Class under test”中填入將要被測試的類“com.myjunit.example.JUnitExample”。如圖所示。創(chuàng)建TestCase測試類(3)單擊“Next”按鈕,彈出選擇待測試方法對話框,選擇“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() /構造類JUnitExample的實例測試JUnitExample jue = new JUnitExample();/assertEquals方法是JUnit提供的輔助函

11、數(shù),用于幫助確定某個被測試的函數(shù)是/否正常工作,稱為“斷言”。assertEquals(expected,actual):expected是/期望值,actual是被測試代碼實際產(chǎn)生的值assertEquals(Hello zzu!, jue.speak(); 運行TestCase測試類右鍵單擊工程,選擇“Run As”“JUnit Test”選項,出現(xiàn)JUnit視圖,如圖所示。運行TestCase測試類可以看到JUnit視圖中出現(xiàn)一個紅條,“Failures”為1,說明測試失敗了,查看失敗原因可以在“Failure Trace”中查找信息。如圖所示,說明測試數(shù)據(jù)與實際數(shù)據(jù)不一致,導致測試失敗

12、。比較測試數(shù)據(jù)與實際數(shù)據(jù)修改TestCase測試類下面,我們修改“JUnitExample”類中的“speak”方法,代碼如下。package com.myjunit.example;public class JUnitExample / 待測試的方法,返回字符串“Hello zzu!”public String speak() return Hello zzu!;運行TestCase測試類再次運行測試。JUnit視圖中出現(xiàn)一個綠條,表明測試成功。成批運行TestCase測試類新建一個“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() /構造TestSuite類,可以不帶參數(shù)TestSuite suite = new TestSuite(Test for com.myjunit.test);/$JUnit-BEGIN$/*此處可以添加多個JUnit test。本例中只是使用了前面的一個測試例子。運行AllTests時就可以測試多個JUnit test,測試失敗的JUnit test不會影響其他的JUnit test測試*/ su

15、ite.addTestSuite(TestGetHelloWorldPrompt.class);/*suite.addTestSuite(其他測試類.class);*/$JUnit-END$return suite;成批運行TestCase測試類右鍵單擊類“AllTests”,選擇“Run As”“JUnit Test”菜單命令,結果如圖所示。JUnit知識要點1JUnit中的初始化與撤銷在“TestGetHelloWorldPrompt”類中,我們可以看到有setUp與tearDown兩個方法,這兩個方法是junit framework.TestCase中提供初始化和反初始化每個測試的方法。

16、setUp方法:在每個測試方法調(diào)用前被調(diào)用,負責初始化測試方法所需要的測試環(huán)境;tearDown方法:在每個測試方法被調(diào)用之后被調(diào)用,負責撤銷測試環(huán)境。它們與測試方法的關系可以描述如下:測試開始setUptestXXXtearDown測試結束。在setUp和tearDown中的代碼是不應該與測試方法相關的,而應該是全局相關的。例如對于測試方法A和B,在setUp和tearDown中的代碼應該是A和B都需要的代碼。2JUnit的各種斷言JUnit為我們提供了一些輔助函數(shù),它們用來幫助我們確定被測試的方法是否按照預期的效果正常工作,通常,把這些輔助函數(shù)稱為斷言。下面介紹一下JUnit的各種斷言。a

17、ssertEquals函數(shù)原型1:assertEquals(String message,expected,actual)參數(shù)說明:message是一個可選的消息,如果提供,將會在發(fā)生錯誤時報告這個消息。 expected是期望值,通常都是用戶指定的內(nèi)容。 actual是被測試的代碼返回的實際值。函數(shù)原型2:assertEquals(String message,expected,actual,tolerance)參數(shù)說明:message是一個可選的消息,如果提供,將會在發(fā)生錯誤時報告這個消息。 expected是期望值,通常都是用戶指定的內(nèi)容。 actual是被測試的代碼返回的實際值。 to

18、lerance是誤差參數(shù),參加比較的兩個浮點數(shù)在這個誤差之內(nèi)則會被認為是相等的。JUnit知識要點assertTrue函數(shù)原型:assertTrue (String message,Boolean condition)參數(shù)說明:message是一個可選的消息,如果提供,將會在發(fā)生錯誤時報告這個消息。 condition是待驗證的布爾型值。該斷言用來驗證給定的布爾型值是否為真,如果結果為假,則驗證失敗。當然,還有驗證為假的測試條件:函數(shù)原型:assertFalse(String message,Boolean condition)該斷言用來驗證給定的布爾型值是否為假,如果結果為真,則驗證失敗。a

19、ssertNull函數(shù)原型:assertNull(String message,Object object)參數(shù)說明:message是一個可選的消息,如果提供,將會在發(fā)生錯誤時報告這個消息。 object是待驗證的對象。該斷言用來驗證給定的對象是否為null,如果不為null,則驗證失敗。相應地,還存在可以驗證非null的斷言:函數(shù)原型:assertNotNull(String message,Object object)該斷言用來驗證給定的對象是否為非null,如果為null,則驗證失敗。JUnit知識要點assertSame函數(shù)原型:assertSame (String message, expected,actual)參數(shù)說明:message是一個可選的消息,如果提供,將會在發(fā)生錯誤時報告這個消息。 expected是期望值。 actual是被測試的代碼返回的實際值。該斷言用來驗證expected參數(shù)和actual參數(shù)所引用的是否是同一個對象,如果不是,則驗證失敗。相應地,也

溫馨提示

  • 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

提交評論