版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、單元測試工具單元測試工具Junit本章目標(biāo)本章目標(biāo)n單元測試的目的單元測試的目的n掌握如何利用掌握如何利用Junit編寫簡單測試編寫簡單測試n了解了解Junit的基本框架的基本框架引入引入n測試驅(qū)動開發(fā)測試驅(qū)動開發(fā)(”(Test-Driven Development, 簡稱簡稱TDD) 是極限編程是極限編程(Extreme programming 簡稱簡稱XP)的重要特點的重要特點n以持續(xù)性的測試來推動代碼的開發(fā),即可以簡化代以持續(xù)性的測試來推動代碼的開發(fā),即可以簡化代碼,又可以保證質(zhì)量。它改變了先編寫代碼,后編碼,又可以保證質(zhì)量。它改變了先編寫代碼,后編寫測試,而是先編寫測試,然后在編寫代碼
2、來滿足寫測試,而是先編寫測試,然后在編寫代碼來滿足測試的方法。測試的方法。n這樣使得測試工作不僅僅是單純的測試,而成為了這樣使得測試工作不僅僅是單純的測試,而成為了設(shè)計的一部分。當(dāng)你習(xí)慣了這種編程方式之后,你設(shè)計的一部分。當(dāng)你習(xí)慣了這種編程方式之后,你會發(fā)現(xiàn),會發(fā)現(xiàn),TDD會成為你的得力助手。會成為你的得力助手。nJunit可以成為一個可以成為一個TDD或單元測試很好的工具或單元測試很好的工具 JUnit的目標(biāo)的目標(biāo)nJUnit 就是為就是為 Java 程序開發(fā)者實現(xiàn)單元測試程序開發(fā)者實現(xiàn)單元測試提供一種框架,使得提供一種框架,使得 Java 單元測試更規(guī)范有單元測試更規(guī)范有效,并且更有利于測
3、試的集成效,并且更有利于測試的集成n框架的三個目標(biāo)框架的三個目標(biāo)n第一個是簡化測試的編寫,這種簡化包括測試框架第一個是簡化測試的編寫,這種簡化包括測試框架的學(xué)習(xí)和實際測試單元的編寫;的學(xué)習(xí)和實際測試單元的編寫;n第二個是使測試單元保持持久性;第二個是使測試單元保持持久性;n第三個則是可以利用既有的測試來編寫相關(guān)的測試。第三個則是可以利用既有的測試來編寫相關(guān)的測試。一個例子:一個例子:獨立靜態(tài)方法,查找獨立靜態(tài)方法,查找list中的最大值中的最大值package TestOne;public class Largest public static int largest(int list) as
4、sertTrue(a=2); assertEquals(a,b);一個例子一個例子一個例子一個例子package TestOne;import junit.framework.*;public class TestLargest extends TestCasepublic TestLargest(String name)super(name);public void testSimple() assertEquals(9,Largest.largest(new int7,8,9);完善獨立靜態(tài)方法完善獨立靜態(tài)方法largest,package TestOne;public class Lar
5、gest public static int largest(int list) int index,max=Integer.MAX_VALUE; for (index=0;indexmax)max=listindex; /end if/end forreturn max; /end function largest 一個例子一個例子一個例子一個例子n測試出現(xiàn)錯誤測試出現(xiàn)錯誤n修改修改一個例子:一個例子:獨立靜態(tài)方法,查找獨立靜態(tài)方法,查找list中的最大值中的最大值package TestOne;public class Largest public static int largest(i
6、nt list) int index,max=Integer.MAX_VALUE; for (index=0;indexmax)max=listindex; /end if/end forreturn max; /end function largest 0一個例子一個例子n【思考】用哪些數(shù)組來進行測試【思考】用哪些數(shù)組來進行測試n考慮:考慮:n最大數(shù)的位置變化:最左、中間、最右最大數(shù)的位置變化:最左、中間、最右n數(shù)組只有一個數(shù)數(shù)組只有一個數(shù)n數(shù)組中有負(fù)數(shù)、相同的數(shù)數(shù)組中有負(fù)數(shù)、相同的數(shù)n測試為空測試為空一個例子一個例子n最大數(shù)的位置變化:最左、中間、最右最大數(shù)的位置變化:最左、中間、最右nP
7、ublic void testOrder()nassertEquals(9,Largest.largest(new int7,8,9);nassertEquals(9,Largest.largest(new int7,9,8);nassertEquals(9,Largest.largest(new int9,7,8);nn出現(xiàn)錯誤,原因?出現(xiàn)錯誤,原因?n數(shù)組只有一個數(shù)數(shù)組只有一個數(shù)npublic void testOne()nassertEquals(9,Largest.largest(new int9);n一個例子一個例子n數(shù)組中有負(fù)數(shù)數(shù)組中有負(fù)數(shù)npublic void testNega
8、tive()nassertEquals(-3,Largest.largest(new int-6,-5,-3);nn出現(xiàn)錯誤,原因?出現(xiàn)錯誤,原因?一個例子一個例子n測試為空測試為空npublic void testEmpty()ntrynLargest.largest(new int);nfail(拋出一個異常拋出一個異常);ncatch(RuntimeException e)nassertTrue(true);nnn修改考慮數(shù)組為空的情況拋出異常修改考慮數(shù)組為空的情況拋出異常nif (list.length=0)nthrow new RuntimeException(Empty list)
9、;nLesson LearnednCode a little, test a little三三 使用使用JUnit進行單元測試進行單元測試n構(gòu)建單元測試構(gòu)建單元測試nJUnit的各種斷言的各種斷言nJunit的框架的框架nJunit軟件結(jié)構(gòu)軟件結(jié)構(gòu)n自定義自定義JUnit斷言斷言nJUnit和異常和異常3.1 構(gòu)建單元測試構(gòu)建單元測試n命名習(xí)慣命名習(xí)慣n如果有一個需要測試的如果有一個需要測試的createAccount方方法,則相應(yīng)的測試方法應(yīng)取名為法,則相應(yīng)的測試方法應(yīng)取名為testCreateAccountn當(dāng)然還有很多其他相關(guān)的測試方法,也必須當(dāng)然還有很多其他相關(guān)的測試方法,也必須取名為
10、取名為testXxx3.1 構(gòu)建單元測試構(gòu)建單元測試n測試代碼的準(zhǔn)備工作測試代碼的準(zhǔn)備工作n準(zhǔn)備測試所需要的各種條件:創(chuàng)建對象、分準(zhǔn)備測試所需要的各種條件:創(chuàng)建對象、分配資源配資源n選擇要測試的方法,設(shè)計測試用例。選擇要測試的方法,設(shè)計測試用例。n驗證被測試方法的行為與期望是否一致驗證被測試方法的行為與期望是否一致n完成后清理資源完成后清理資源3.2 JUnit的斷言的斷言nJUnit給定的函數(shù),幫助確定被測試函數(shù)給定的函數(shù),幫助確定被測試函數(shù)是否工作正常,這些函數(shù)統(tǒng)稱為斷言。是否工作正常,這些函數(shù)統(tǒng)稱為斷言。它是單元測試的最基本組成部分它是單元測試的最基本組成部分n每個函數(shù)都會記錄失敗或者錯
11、誤,并通每個函數(shù)都會記錄失敗或者錯誤,并通過過JUnit的類來包裹錯誤。的類來包裹錯誤。n在控制臺上將通過紅色條及輔助信息來在控制臺上將通過紅色條及輔助信息來說明。說明。JUnit 的斷言的斷言nassertEquals(Object expected,Object actual):兩個對象是否相同:兩個對象是否相同nassertEquals(int expected,int actual):原始類型是否相同。原始類型是否相同。nassertNull:指針是否為空:指針是否為空nassertSame assertEquals(Object expected,Object actual): 兩個
12、對象的結(jié)兩個對象的結(jié)構(gòu)是否相同構(gòu)是否相同nassertTrue(boolean condition):是否返:是否返回真值回真值3.2 JUnit的各種斷言的各種斷言nassertEquals(String message, expected, actual,tolerance)比較兩個對象是否相等比較兩個對象是否相等nexpected是期望值,是期望值,actual是被測試代碼實際產(chǎn)是被測試代碼實際產(chǎn)生的值生的值n特殊:數(shù)字組(引用本身),浮點數(shù)需要格外的誤特殊:數(shù)字組(引用本身),浮點數(shù)需要格外的誤差參數(shù)差參數(shù)nassertEquals(“shoule be 3 1/3”, 3.33, 1
13、0.0/3.0, 0.01)3.2 JUnit的各種斷言的各種斷言nassertNull(String message,Object))nassertNotNull(String message,Object))n驗證一個給定的對象是否為空或非空驗證一個給定的對象是否為空或非空3.2 JUnit的各種斷言的各種斷言nassertSame (String message,Object expected,Object actual):n兩個對象是否引用同一對象兩個對象是否引用同一對象3.2 JUnit的各種斷言的各種斷言nassertTrue(String message,boolean cond
14、ition):n驗證條件二元條件是否返回真值驗證條件二元條件是否返回真值3.2 JUnit的各種斷言的各種斷言nFail(String message)n上面的斷言會使測試立即失敗上面的斷言會使測試立即失敗n用于標(biāo)記某個不該到達的分支,如一個用于標(biāo)記某個不該到達的分支,如一個預(yù)期發(fā)生的異常。預(yù)期發(fā)生的異常。JUnit和異常和異常n兩種需要關(guān)注的異常兩種需要關(guān)注的異常n從測試代碼拋出的可預(yù)測異常從測試代碼拋出的可預(yù)測異常n由于模塊發(fā)生嚴(yán)重錯誤而拋出不可預(yù)測異常由于模塊發(fā)生嚴(yán)重錯誤而拋出不可預(yù)測異常n例如例如 測試實例中數(shù)值為空的情況測試實例中數(shù)值為空的情況public void testEmpt
15、y()tryLargest.largest(new int);fail(拋出一個異常拋出一個異常);catch(RuntimeException e)assertTrue(true);測試與異常測試與異常n雖然你可以自己捕捉部分異常,但建議雖然你可以自己捕捉部分異常,但建議有些出乎意料異常還是讓有些出乎意料異常還是讓JUnit來完成來完成n可以寫出可以寫出npublic void testData() throws FileNoFoundExcepiton enFileInputStream f=new fileInputStream(“data.txt”);n3.2 JUnit的各種斷言的各
16、種斷言n斷言一旦失敗,測試方法就停止,那么斷言一旦失敗,測試方法就停止,那么該方法其他的斷言就無法執(zhí)行該方法其他的斷言就無法執(zhí)行n只能修復(fù)好失敗的測試,一步一步的前只能修復(fù)好失敗的測試,一步一步的前進。進。n只有當(dāng)所有的測試都通過了,你才能夠只有當(dāng)所有的測試都通過了,你才能夠增加新的特性增加新的特性n那么如何運行一組測試呢?那么如何運行一組測試呢?3.3 JUnit框架框架n如何運行測試呢?如何運行測試呢?n需要一個框架需要一個框架測試框架測試框架 import junit.framework.*;public class TestSimplet extends TestCase public
17、 TestSimple (String name) super(name); public void testAdd() assertEquals(2, 1+1); assertEquals(-1, -3+2); 導(dǎo)入所需的導(dǎo)入所需的JUnit類類創(chuàng)建創(chuàng)建TestCase類類的子類的子類每一個測試都每一個測試都是一個方法是一個方法判斷是否相等判斷是否相等創(chuàng)建以創(chuàng)建以String為參為參數(shù)的構(gòu)造函數(shù),調(diào)數(shù)的構(gòu)造函數(shù),調(diào)用用super方法方法實例一實例一FoojunitTestCaseexercise1.*FooTesttest1test2n按照框架規(guī)定:編寫的所有測試類,必須繼承自按照框架規(guī)定:
18、編寫的所有測試類,必須繼承自 junit.framework.TestCase類;類;n里面的測試方法,命名應(yīng)該以里面的測試方法,命名應(yīng)該以 Test 開頭,必須是開頭,必須是 public void 而且不能有參數(shù);而且不能有參數(shù);n為了測試查錯方便,盡量一個為了測試查錯方便,盡量一個 TestXXX 方法對一個方法對一個功能單一的方法進行測試;功能單一的方法進行測試;n使用使用 assertEquals等等 junit.framework.TestCase 中的斷言方法來判斷測試結(jié)果正確與否。中的斷言方法來判斷測試結(jié)果正確與否。n在這個測試類中有加入多少個測試方法,就會運行多在這個測試類中
19、有加入多少個測試方法,就會運行多少個測試方法。少個測試方法。測試相關(guān)規(guī)則測試相關(guān)規(guī)則3.4 JUnit 的軟件結(jié)構(gòu)的軟件結(jié)構(gòu) nJUnit 共有七個包共有七個包n核心的包就是核心的包就是junit.framework和和 junit.runner nframework負(fù)責(zé)整個測試對象的構(gòu)架負(fù)責(zé)整個測試對象的構(gòu)架nrunner負(fù)責(zé)測試驅(qū)動。負(fù)責(zé)測試驅(qū)動。nTestCase、TestSuite 和和 BaseTestRunner是是 JUnit 框架的骨干。一旦理解了這框架的骨干。一旦理解了這 3 個類個類的工作方式,就可以隨心所欲地編寫測試了。的工作方式,就可以隨心所欲地編寫測試了。nTestC
20、ase (測試用例測試用例)擴展了擴展了JUnit 的的 TestCase TestCase 類的類。類的類。n它以它以 testXxx 方法的形式包含一個或多個測方法的形式包含一個或多個測試。一個試。一個 test case 把具有公共行為的測試歸把具有公共行為的測試歸入一組。入一組。n當(dāng)提到測試的時候,指的是一個當(dāng)提到測試的時候,指的是一個 testXxx方法;方法;當(dāng)提及當(dāng)提及 test case 的時候,指的是一個繼承自的時候,指的是一個繼承自Testcase 的類,也就是一組測試。的類,也就是一組測試。3.4 JUnit 的軟件結(jié)構(gòu)的軟件結(jié)構(gòu)nTestSuite(測試集合測試集合)一
21、組測試。一個一組測試。一個test suite 是把多個相關(guān)測試歸入一組的便捷方式。是把多個相關(guān)測試歸入一組的便捷方式。n如果你沒有為如果你沒有為 TestCase 定義一個定義一個 test suite,那么,那么 JUnit 就會自動提供一個就會自動提供一個 test suite,包含,包含 TestCase 中所有的測中所有的測試。試。nTestRunner(測試運行器測試運行器)執(zhí)行執(zhí)行 test suite 的程的程序。序。nJUnit 提供了幾個提供了幾個 test runner,可以用它們來執(zhí)行測試。,可以用它們來執(zhí)行測試。n沒有沒有 TestRunner 接口,只有一個所有接口
22、,只有一個所有 test runner 都繼都繼承的承的 BaseTestRunner。n當(dāng)編寫當(dāng)編寫 TestRunner 的時候,實際上指的是任何繼承的時候,實際上指的是任何繼承 BaseTestRunner 的的 test runner 類。類。3.4 JUnit 的軟件結(jié)構(gòu)的軟件結(jié)構(gòu)TestCaseTestSuiteBaseTestRunnerTestResult+=JUnit 成員共同產(chǎn)生測試結(jié)果成員共同產(chǎn)生測試結(jié)果3.4 JUnit 的軟件結(jié)構(gòu)的軟件結(jié)構(gòu)n當(dāng)需要編寫更多的當(dāng)需要編寫更多的 test case 的時候,可以創(chuàng)的時候,可以創(chuàng)建更多的建更多的 TestCase 對象。對象
23、。n當(dāng)需要一次執(zhí)行多個當(dāng)需要一次執(zhí)行多個 TestCase 對象的時候,對象的時候,可以創(chuàng)建另一個叫做可以創(chuàng)建另一個叫做 TestSuite 的對象。的對象。n為了執(zhí)行為了執(zhí)行TestSuite,需要使用,需要使用 TestRunnern在正常情況下,只需要編寫在正常情況下,只需要編寫test case,其他類會協(xié)助完成測試。其他類會協(xié)助完成測試。n這這 3 個類和另外個類和另外 4 個類緊密配合,形成個類緊密配合,形成了了 JUnit 框架的核心。下表歸納了這框架的核心。下表歸納了這 7 個核心類各自的責(zé)任。個核心類各自的責(zé)任。3.4 JUnit 的軟件結(jié)構(gòu)的軟件結(jié)構(gòu)類類/接口接口 責(zé)責(zé) 任
24、任 Assert當(dāng)條件成立時 assert 方法保持沉默,但若條件不成立就拋出異常 TestResultTestResult 包含了測試中發(fā)生的所有錯誤或者失敗包含了測試中發(fā)生的所有錯誤或者失敗Test可以運行可以運行 Test 并把結(jié)果傳遞給并把結(jié)果傳遞給 TestResultTestListener測試中若產(chǎn)生事件測試中若產(chǎn)生事件(開始、結(jié)束、錯誤、失敗開始、結(jié)束、錯誤、失敗)會通知會通知 TestListenerTestCaseTestCase 定義了可以用于運行多項測試的環(huán)境定義了可以用于運行多項測試的環(huán)境TestSuiteTestSulte 運行一組運行一組 test ease (它
25、們可能包含其他它們可能包含其他 testsuite),它是,它是Test的組合的組合BaseTestRunnertest runner 是用來啟動測試的用戶界面,是用來啟動測試的用戶界面,BaseTestRunner 是所有是所有 test runner 的超類的超類JUnit 框架的基本結(jié)構(gòu)框架的基本結(jié)構(gòu)run()TestfNamesetUp()runTest()tearDown()run()TestCaserun()addTest()TestSuite*TestResultjunit.frameworkassertTrue()assertEquals().Assertjunit.textui.TestRunnerjunit.swingui.TestRunner3.5 自定義自定義JUnit斷言斷言n通常標(biāo)準(zhǔn)斷言對大多數(shù)測試已經(jīng)夠用,通常標(biāo)準(zhǔn)斷言對大多數(shù)測試已經(jīng)夠用,但在某些環(huán)境下可能要處理特殊數(shù)據(jù)類但在某些環(huán)境下可能要處理特殊數(shù)據(jù)類型或多個測試共享的操作,就需要自定型或多個測試共享的操作,就需要自定義斷言。義斷言。n如測試一個經(jīng)濟方面的程序且所有測試如測試一個經(jīng)濟方面的程序且所有測試都使用了都使用了Money數(shù)據(jù)類型數(shù)據(jù)類型3.5 自定義自定義JUnit斷言斷
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人2024年度在線教育服務(wù)合同5篇
- 海底兩萬里觀后感與探討
- 16大家一起來合作 (說課稿)-部編版道德與法治一年級下冊
- 3 古詩詞三首 西江月·夜行黃沙道中(說課稿)-2024-2025學(xué)年統(tǒng)編版語文六年級上冊
- 上饒衛(wèi)生學(xué)校二期建設(shè)項目(2024版)
- 會員協(xié)議書范本
- 保溫系統(tǒng)施工的合同范本
- 專用化學(xué)品銷售協(xié)議示例(2024年發(fā)布)版B版
- 專用設(shè)備買賣協(xié)議細(xì)則(2024版)版B版
- 專業(yè)鞋品采購協(xié)議模板2024版A版
- 國優(yōu)電力工程現(xiàn)場復(fù)查要點
- 金科新未來大聯(lián)考2025屆高三12月質(zhì)量檢測語文試題(含答案解析)
- 烤煙科技員考試題答案
- 商業(yè)球房運營方案
- 《地下水環(huán)境背景值統(tǒng)計表征技術(shù)指南(試行)》
- 高職院校智能制造實驗室實訓(xùn)中心建設(shè)方案
- 電商整年銷售規(guī)劃
- 口腔癌放療護理
- 鉆桿購銷合同模板
- 工業(yè)大數(shù)據(jù)采集處理與應(yīng)用
- 卷煙廠車間輔助業(yè)務(wù)外包項目服務(wù)方案(技術(shù)方案)
評論
0/150
提交評論