




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、JUnit是由 Erich Gamma 和 Kent Beck 編寫的一個(gè)回歸測(cè)試框架(regression testing framework)。Junit測(cè)試是程序員測(cè)試,即白盒測(cè)試。 JUnit測(cè)試骨架使用JUnit時(shí),主要都是通過繼承TestCase類別來撰寫測(cè)試用例,使用testXXX()名稱來撰寫單元測(cè)試。用JUnit寫測(cè)試真正所需要的就三件事:1 一個(gè)import語句引入所有junit.framework.*下的類。2 一個(gè)extends語句讓你的類從TestCase繼承。3
2、 一個(gè)調(diào)用super(string)的構(gòu)造函數(shù)。功能類MathToolpackage com.zj.c01; public class MathTool public static int gcd(int num1, int num2) int r = 0; whi
3、le (num2 != 0) r = num1 % num2; num1 = num2; num2 = r;
4、60; return num1; 測(cè)試類MathToolTestpackage com.zj.c01;import junit.framework.TestCase; public class MathToolTest extends TestCase public MathToolTest(String name) &
5、#160; super(name); public void testGcd() assertEquals(5, MathTool.gcd(10, 5); 使用Eclipse-Run As JUnit Test在運(yùn)行TestRunner執(zhí)行測(cè)試時(shí),你會(huì)發(fā)現(xiàn)到有Failure與Error兩種測(cè)試尚未
6、通過的信息。Failure指的是預(yù)期的結(jié)果與實(shí)際運(yùn)行單元的結(jié)果不同所導(dǎo)致,例如當(dāng)使用assertEquals()或其它assertXXX()方法斷言失敗時(shí),就會(huì)回報(bào)Failure,這時(shí)候要檢查你的單元方法中的邏輯設(shè)計(jì)是否有誤。Error指的是你的程序沒有考慮到的情況,在斷言之前程序就因?yàn)槟撤N錯(cuò)誤引發(fā)例外而終止,例如在單元中存取某個(gè)數(shù)組,因?yàn)榇嫒〕鏊饕l(fā) ArrayIndexOutOfBoundsException,這會(huì)使得單元方法無法正確完成,在測(cè)試運(yùn)行到asertXXXX()前就提前結(jié)束,這時(shí)候要檢查你的單元方法中是否有未考慮到的情況而引發(fā)流程突然中斷。 JUnit
7、的各種斷言JUnit提供了一些輔助函數(shù),用于幫助你確定某個(gè)被測(cè)試函數(shù)是否工作正常。通常而言,我們把所有這些函數(shù)統(tǒng)稱為斷言。斷言是單元測(cè)試最基本的組成部分。1. assertEquals(String message, expected,actual)比較兩個(gè)基本類型或?qū)ο笫欠裣嗟龋╡xpected和actual是原始類型數(shù)值(primitive value)或者必須為實(shí)現(xiàn)比較而具有equal方法);2.assertFalse(String message,boolean condition)對(duì)布爾值求值,看它是否為“真“;3.assertTrue(String message,boolean
8、condition)對(duì)布爾值求值,看它是否為“假“;4.assertNull(String message,java.lang.Object object)檢查對(duì)象是否為“空“;5.assertNotNull(String message,java.lang.Object object)檢查對(duì)象是否不為“空”;6.assertSame(String message,expected,actual)檢查兩個(gè)對(duì)象是否為同一實(shí)例;7.assertNotSame(String message,expected,actual)檢查兩個(gè)對(duì)象是否不為同一實(shí)例;8. fail( String message
9、)使測(cè)試立即失敗,其中 message 參數(shù)使可選的。這種斷言通常被用于標(biāo)記某個(gè)不應(yīng)該到達(dá)的分支(例如,在一個(gè)預(yù)期發(fā)生的異常之后) 一個(gè)TestCase測(cè)試實(shí)例下面是一個(gè)數(shù)字功能類,它提供了求最大值函數(shù)和求最小值函數(shù):package com.zj.c01; public class NumberTool public static int getMax(int arr)
10、60;int max = Integer.MIN_VALUE; if (arr.length = 0) throw new RuntimeException("Empty list"); for (int
11、;index = 0; index < arr.length; index+) if (arrindex > max) max = arrindex;
12、; return max; public static int getMin(int arr) int min = Integer.MAX_VALUE; if (arr.length = 0)
13、0; throw new RuntimeException("Empty list"); for (int i = 0; i < arr.length; i+) if (arri < min)
14、60; min = arri; return min; 下面針對(duì)求最大值函數(shù)編寫測(cè)試用例:1.簡(jiǎn)單測(cè)試:7,8,9->9;2.位序測(cè)試:9,8,7 ->9;7,9,8 ->9;8,7,9 ->9;3.重復(fù)值測(cè)試:
15、9,7,9,8 ->9;4.單值測(cè)試:1->1;5.負(fù)值測(cè)試:-7,-8,-9->-7;6.空值測(cè)試:->拋出異常;測(cè)試類NumberToolTest:package com.zj.c01;import junit.framework.TestCase; public class NumberToolTest extends TestCase public NumberToolTest(String name)
16、0; super(name); public void testSimple() assertEquals(9, NumberTool.getMax(new int 7, 8, 9 ); public void
17、0;testOrder() assertEquals(9, NumberTool.getMax(new int 9, 8, 7 ); assertEquals(9, NumberTool.getMax(new int 7, 9, 8 ); assertEquals(9, NumberTool.getMax(new int
18、 8, 7, 9 ); public void testDups() assertEquals(9, NumberTool.getMax(new int 9, 7, 9, 8 ); public void testOne()
19、160; assertEquals(1, NumberTool.getMax(new int 1 ); public void testNegitave() assertEquals(-7, NumberTool.getMax(new int -7, -8, -9 );
20、60; public void testEmpty() try NumberTool.getMax(new int ); fail("Should have
21、thrown an exception"); catch (RuntimeException e) assertTrue(true); 使用Eclipse-Run As JUnit Test JUnit和異常對(duì)于測(cè)
22、試而言,下面兩種異常是我們可能會(huì)感興趣的:1 從測(cè)試代碼拋出的可預(yù)測(cè)異常。2 由于某個(gè)模塊(或代碼)發(fā)生嚴(yán)重錯(cuò)誤,而拋出的不可預(yù)測(cè)異常。任何對(duì)assertTrue(true)的使用都應(yīng)該被翻譯為“我預(yù)期控制流程會(huì)達(dá)到這個(gè)地方”。通常而言,對(duì)于方法中每個(gè)被期望的異常,你都應(yīng)該寫一個(gè)專門的測(cè)試來確認(rèn)該方法在應(yīng)該拋出異常的時(shí)候確實(shí)會(huì)拋出異常。如上例中testEmpty()測(cè)試方法的設(shè)計(jì)。對(duì)于處于出乎意料的異常,你最好簡(jiǎn)單的改變你的測(cè)試方法的聲明讓它能拋出可能的異常。JUnit框架可以捕獲任何異常,并且把它報(bào)告為一個(gè)錯(cuò)誤,這些都不需要你的參與。 P
23、er-method的Setup和Tear-down對(duì)于重復(fù)出現(xiàn)在各個(gè)單元測(cè)試中的運(yùn)行環(huán)境,可以集中加以管理,可以在繼承TestCase之后,重新定義setUp()與tearDown()方法,將數(shù)個(gè)單元測(cè)試所需要的運(yùn)行環(huán)境在setUp()中創(chuàng)建,并在tearDown()中銷毀。JUnit的TestCase基類提供兩個(gè)方法供你改寫,分別用于環(huán)境的建立和清理:protected void setup();protected void teardown(); 測(cè)試類MathToolTest2:package com.zj.c01;import junit.framewor
24、k.TestCase; public class NumberToolTest2 extends TestCase private int arr; public NumberToolTest2(String name) super(name);
25、 protected void setUp() throws Exception super.setUp(); arr = new int -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 ; protected
26、 void tearDown() throws Exception super.tearDown(); arr = null; public void testMax()
27、160;assertEquals(5, NumberTool.getMax(arr); public void testMin() assertEquals(-5, NumberTool.getMin(arr); TestSuite每一個(gè)定義好的TestCase,都使用TestRunner來運(yùn)行測(cè)試,事實(shí)上TestRunner并不
28、直接運(yùn)行TestCase上的單元方法,而是通過TestSuite ,TestSuite可以將數(shù)個(gè)TestCase組合在一起。在上面的例子中,并沒有看到任何的TestSuite,這是因?yàn)門estRunner的run()方法中會(huì)建立TestSuite:static public void run(Class testClass) run(new TestSuite(testClass);在這個(gè)TestSuite的建構(gòu)式中,會(huì)使用反射自動(dòng)找出testXXX()方法,并加入待執(zhí)行的測(cè)試方法, T
29、estRunner的run()方法中會(huì)去執(zhí)行TestSuite上的run()方法,然后TestSuite會(huì)將之委托給TestCase上的 run()方法,而該run()方法中執(zhí)行每一個(gè)testXXX()方法。如果你只想執(zhí)行某TestCase中的部分測(cè)試函數(shù),則可自己構(gòu)建TestSuite,下面的代碼針對(duì)NumberToolTest中的兩個(gè)測(cè)試函數(shù)testSimple()和testNegitave()進(jìn)行測(cè)試。package com.zj.c02;import com.zj.c01.NumberToolTest;import junit.framework
30、.Test;import junit.framework.TestSuite; public class PartTest public static Test suite() TestSuite suite = new TestSuite(); suite.addTest(new Number
31、ToolTest("testSimple"); suite.addTest(new NumberToolTest("testNegitave"); return suite; 使用Eclipse-Run As JUnit Test你也可以組合多個(gè)testCase,下面的代碼將MathToolTest和NumberToolTest
32、集中到一個(gè)TestSuite中:package com.zj.c02;import com.zj.c01.MathToolTest;import com.zj.c01.NumberToolTest;import junit.framework.Test;import junit.framework.TestSuite; public class CompositeTest public static Test suite()
33、; TestSuite suite = new TestSuite("Running all tests."); suite.addTestSuite(MathToolTest.class); suite.addTestSuite(NumberToolTest.class); &
34、#160; return suite; 使用Eclipse-Run As JUnit Test Per-suite Setup和Tear-down一般而言,你只須針對(duì)每個(gè)方法設(shè)置運(yùn)行環(huán)境;但是在某些情況下,你須為整個(gè)test suite設(shè)置一些環(huán)境,以及在test suite中的所有方法都執(zhí)行完成后做一些清理工作。要達(dá)到這種效果,你需要per-suite setup和per-suite teardown。Per-suite的setup要復(fù)雜一些。你需要提供所需測(cè)試的一個(gè)suite(無論通過什么樣的方式)并且把它包裝進(jìn)一
35、個(gè)TestSetup對(duì)象。注意你可以在同一個(gè)類中同時(shí)使用per-sutie和per-test的setup()和teardown。package com.zj.c02;import junit.extensions.TestSetup;import junit.framework.Test;import junit.framework.TestSuite;import com.zj.c01.MathToolTest;import com.zj.c01.NumberToolTest; public class WrapperCompositeTest public static Test suite() TestSuite suite = new TestSuite("Running all tests with env.");
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 法律文書要素提取員考試試卷及答案
- 2025年氣液動(dòng)閥門、電磁閥、自鎖閥項(xiàng)目建議書
- 消費(fèi)者保護(hù)工作總結(jié)
- 消防員年末工作個(gè)人總結(jié)
- 金融行業(yè)工作計(jì)劃范文5篇
- 2025年碳纖維預(yù)浸布合作協(xié)議書
- 2025年廂式改裝車、特種車輛合作協(xié)議書
- 2025年高純超細(xì)石英粉合作協(xié)議書
- 2025年沐浴清潔海綿項(xiàng)目合作計(jì)劃書
- 智慧城市背景下智能垃圾分類系統(tǒng)的政策支持與市場(chǎng)響應(yīng)
- 2023-2024學(xué)年安徽省安慶市高二(下)期末考試物理試卷(含答案)
- YBT 2011-2014 連續(xù)鑄鋼方坯和矩形坯
- 檢驗(yàn)科標(biāo)本采集手冊(cè)檢驗(yàn)科標(biāo)本采集手冊(cè)參考
- 2024-2030年中國靶機(jī)行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- JG∕T 197-2018 預(yù)應(yīng)力混凝土空心方樁
- 山東省淄博市2024年高一下學(xué)期期末考試英語試題含解析
- 10kv線路帶電跨越綜合項(xiàng)目施工專項(xiàng)方案
- 材料、構(gòu)配件進(jìn)場(chǎng)檢驗(yàn)記錄表C4-44
- 有線廣播電視機(jī)務(wù)員職業(yè)技能試題及答案
- 管溝開挖回填專項(xiàng)施工方案
- 產(chǎn)業(yè)園概念規(guī)劃設(shè)計(jì)任務(wù)書
評(píng)論
0/150
提交評(píng)論