国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

【Java語言生態(tài)篇】Junit測試單元

2019-11-14 15:31:37
字體:
供稿:網(wǎng)友
01 概述

           JUnit是一個由 Erich Gamma 和 Kent Beck 編寫的一個回歸測試框架(regression testing framework)。Junit測試是白盒測試。JUnit有它自己的JUnit擴展生態(tài)圈。多數(shù)java的開發(fā)環(huán)境都已經(jīng)集成了JUnit作為單元測試的工具。[1]

  JUnit是一個開放源代碼的Java測試框架,用于編寫和運行可重復(fù)的測試。他是用于單元測試框架體系xUnit的一個實例(用于java

語言)。它包括以下特性:

1、用于測試期望結(jié)果的斷言(Assertion)

2、用于共享共同測試數(shù)據(jù)的測試工具

3、用于方便的組織和運行測試的測試套件

4、圖形和文本的測試運行器

  測試一般分為:單元測試、集成測試(主要看一塊代碼加進去后,系統(tǒng)會不會有問題)、驗收測試和壓力測試。在大點的公司開發(fā)

員每天上班后,第一件事情就是從svn上把自己負責的代碼checkout下來,然后運行單元測試,如果單元測試通過,那么說明自己的

代碼沒有問題,然后就在代碼塊上修改與添加,完成后再用junit進行測試,測試完成后如果沒有問題,那么就把相應(yīng)的代碼塊提交給

svn上。[2]

02 Junit配置

 

 

環(huán)境:Eclipse 中配置junit,

  1. 選擇項目Junit4(在Package Explorer中)
  2. 右擊鼠標
  3. 選擇PRoperties
  4. 選擇Java Build Path (在左邊的菜單中)
  5. 在右邊選擇標簽 Libraries
  6. 單擊按鈕“Add Library” 
  7. 選擇JUnit , 單擊按鈕 “Next>” 
  8. 選擇JUnit library version 為: JUnit4
  9. 單擊按鈕“Finish”
  10. 單擊按鈕 “OK”

或手動 添加Junit.jar和hamcrest-core-xx.jar,hamcrest-library-xx.jar (或hamcrest-all-xx.jar)。(建議手動添加,在eclipse中通過前一種方法只引入Junit-xx.jar 和 hamcrest-core-xx.jar)

03 Junit3 和 Junit4的區(qū)別

 

 

  1. Junit3必須引入和繼承TestCase
  2. Junit3 測試方法必須以test開頭
  3. Junit3 測試方法前后的執(zhí)行方法必須名為setUp() 和 tearDown()
  1. Junit4 不需要引入和繼承TestCase。采用注解,在方法前加入@Test
  2. Junit4 測試方法不需要強制為test開頭
  3. Junit4 測試方法前后執(zhí)行方法不需要強制命名為setUp() 和 tearDown() ,只需要添加注解@Before和@After
  4. Junit4 中添加了異常測試
04 Junit4的幾個常用注解[3]

 

 

Junit 4 的單元測試用例執(zhí)行順序為:

@BeforeClass –> @Before –> @Test –> @After –> @AfterClass;

每一個測試方法的調(diào)用順序為:@Before –> @Test –> @After。

--------------------------------------------------------------------

  1. @Before:初始化方法,在任何一個測試執(zhí)行之前必須執(zhí)行的代碼;
  2. @After:釋放資源,在任何測試執(zhí)行之后需要進行的收尾工作。在每個測試方法執(zhí)行之后執(zhí)行一次,該annotation只能修飾public void 方法;
  3. @Test:測試方法,表明這是一個測試方法。在Junit中將會自動被執(zhí)行。該annotation只能夠修飾public void 方法。對于方法的聲明也有如下要求:名字可以隨便取,沒有任何限制,但是返回值必須為void,而且不能有任何參數(shù)。如果違反這些規(guī)定,會在運行時拋出一個異常。至于方法內(nèi)該寫些什么,那就要看你需要測試些什么了;在這里可以測試期望異常和超時時間,如 @Test(timeout = 100):我們給測試函數(shù)設(shè)定一個執(zhí)行時間,超過了這個時間(100毫秒),它們就會被系統(tǒng)強行終止,并且系統(tǒng)還會向你匯報該函數(shù)結(jié)束的原因是因為超時,這樣你就可以發(fā)現(xiàn)這些Bug了。
  4. @Ignore:忽略的測試方法,標注的含義就是“某些方法尚未完成,暫不參與此次測試”;這樣的話測試結(jié)果就會提示你有幾個測試被忽略,而不是失敗。一旦你完成了相應(yīng)函數(shù),只需要把@Ignore標注刪去,就可以進行正常的測試。
  5. @BeforeClass:針對所有測試,只執(zhí)行一次,且必須為public static void;
  6. @AfterClass:針對所有測試,將會在所有測試方法執(zhí)行結(jié)束后執(zhí)行一次,且必須為public static void;
05 hamcrest 和 testSuite 介紹[4]

 

      hamcrest就是專門為增強junit來提供的框架。Junit中,主要使用assert做一些基本的判斷。但很多時候使用assert做判斷,并不方便,如果要判斷某幾個值是否為true或false,這時使用hamcrest來判斷就會方便許多。

      在一個項目中,可能有很多的測試類,如果每個測試類都要點擊運行,那么成百上千個類都需要測試,這會是個比較繁重的工作,這時可以使用可以使用junit的jar包中提供的Suite來解決這個問題。

06 綜合實例

 

TestCalcuate類

import static org.junit.Assert.*;import static org.hamcrest.Matchers.*;import org.junit.Before;import org.junit.Test;public class TestCalcuate {	Calcuate cal;	@Before	public void setUp(){		cal=new Calcuate();	}	@Test	public void testAdd(){		int rel=cal.add(22, 33);		assertEquals("加法存在問題",rel, 55);	}		@Test	public void testMinus(){		int rel=cal.minus(33, 11);		assertEquals("減法存在問題",rel,22);	}	@Test(expected=ArithmeticException.class)	public void testDivid(){		int rel=cal.divide(22, 0);		assertEquals("除法存在問題",rel,2);	}	@Test	public void testMul(){		int rel=cal.mul(10, 20);		assertEquals("乘法存在問題", rel,200);	}	@Test(timeout=1000)	public void testTime(){		try{			Thread.sleep(200);		}catch(Exception e){			e.printStackTrace();		}		int rel=cal.mul(10, 20);		assertEquals("乘法存在問題", rel,200);	}		@Test	public void testHam(){		assertThat(50, allOf(greaterThan(49),lessThan(60)));		assertThat(60, allOf(greaterThan(40),lessThan(90)));		assertThat("like.txt", endsWith(".txt"));	}}

TestA類

import org.junit.*;public class TestA {	@Test	public void testA(){		System.out.println("testA");	}}

TestB類

import org.junit.*;public class TestB {	@Test	public void testB(){		System.out.println("testB");	}}

TestSuite類

import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Suite;import org.junit.runners.Suite.SuiteClasses;@RunWith(Suite.class)@SuiteClasses({TestA.class,TestB.class,TestCalcuate.class})public class TestSuite {	@Test	public void testSuite(){		System.out.println("testSuite");	}}

 

07 其它問題

 

 

1、測試原則:[4]

  1. 建議創(chuàng)建一個專門的source folder--->test來編寫測試類代碼。上面例子就新建一個test的資源包。
  2. 測試類的包應(yīng)該保持和需要測試的類一致。上面的例子中Calcuate類在src/cn/whp/util包中,相應(yīng)的測試類就在test/cn/whp/util中。
  3. 測試單元中的每個測試方法都必須可以獨立執(zhí)行,不相互依賴,沒有順序。

2、junit在進行單元測試的時候,使用assertThat方法,發(fā)現(xiàn)hamcrest的greaterThan等方法無法識別【說是沒有定義】,而且無法靜態(tài)引用到Matchers類【import static org.hamcrest.Matchers.*;】 [5]

  原因:因為junit默認只會依賴hamcrest-core-1.3包,而實際上hamcrest還有一個hamcrest-library.jar用來放置很多工具

參考文獻

 

 

[1] 百度百科 Junit

[2] 悔海 http://huihai.VEvb.com/blog/1986568

[3] 小倩的博客 http://blog.sina.com.cn/s/blog_8354dda80101ee8v.html

[4] 悔海 http://huihai.VEvb.com/blog/1994270

[5] http://www.fwqtg.net/junit-使用hamcrest的matcher找不到的問題(比如greaterthan).html

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 兰溪市| 乐山市| 科技| 紫阳县| 秭归县| 平江县| 城市| 山西省| 乐安县| 青河县| 绥中县| 山丹县| 陕西省| 兴安县| 新乡市| 宜君县| 炎陵县| 延寿县| 舟山市| 丰镇市| 迁安市| 随州市| 泊头市| 潢川县| 禄劝| 新干县| 临澧县| 扶风县| 禄丰县| 托里县| 察隅县| 龙陵县| 华宁县| 张掖市| 遵义县| 颍上县| 祁阳县| 平顶山市| 霍山县| 林口县| 马尔康县|