您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > junit
JUnit及其相關(guān)的單元測(cè)試技術(shù)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/8/2 10:40:17 ] 推薦標(biāo)簽:

  1.2.2 JUnit4引入了一個(gè)JUnit3中沒(méi)有的新特性——類(lèi)范圍的 setUp() 和tearDown() 方法。

  任何用 @BeforeClass 注釋的方法都將在該類(lèi)中的測(cè)試方法運(yùn)行之前剛好運(yùn)行一次,而任何用@AfterClass注釋的方法都將在該類(lèi)中的所有測(cè)試都運(yùn)行之后剛好運(yùn)行一次。

  1.2.3 異常測(cè)試:

  異常測(cè)試是Junit4中的大改進(jìn)。Junit3的異常測(cè)試是在拋出異常的代碼中放入try塊,然后在try塊的末尾加入一個(gè)fail()語(yǔ)句。

  例如該方法測(cè)試一個(gè)被零除拋出一個(gè)ArithmeticException:

  該方法不僅難看,而且試圖挑戰(zhàn)代碼覆蓋工具,因?yàn)椴还軠y(cè)試是否通過(guò)還是失敗,總有一些代碼不被執(zhí)行。在JUni4中,可以編寫(xiě)拋出異常的代碼,并使用注釋來(lái)聲明該異常是預(yù)期的:

  如果沒(méi)有異常拋出或者拋出一個(gè)不同的異常,那么測(cè)試將失敗。

  1.2.4 JUnit4添加了兩個(gè)比較數(shù)組的assert() 方法:

  public static void assertEquals(Object[] expected,Object[]actual)

  public static void assertEquals(String message, Object[]expected,Object[] actual)

  這兩個(gè)方法以直接的方式比較數(shù)組:如果數(shù)組長(zhǎng)度相同,且每個(gè)對(duì)應(yīng)的元素相同,則兩個(gè)數(shù)組相等,否則不相等。數(shù)組為空的情況也作了考慮。

  1.3 JUnit 4 常用的幾個(gè)annotation 介紹

  ★ @Before:初始化方法,在任何一個(gè)測(cè)試執(zhí)行之前必須執(zhí)行的代碼;

  ★ @After:釋放資源,在任何測(cè)試執(zhí)行之后需要進(jìn)行的收尾工作;

  ★@Test:測(cè)試方法,表明這是一個(gè)測(cè)試方法。對(duì)于方法的聲明也有如下要求:名字可以隨便取,沒(méi)有任何限制,但是返回值必須為void,而且不能有任何參數(shù)。如果違反這些規(guī)定,會(huì)在運(yùn)行時(shí)拋出一個(gè)異常。至于方法內(nèi)該寫(xiě)些什么,那要看你需要測(cè)試些什么了;在這里可以測(cè)試期望異常和超時(shí)時(shí)間,如@Test(timeout=100),我們給測(cè)試函數(shù)設(shè)定一個(gè)執(zhí)行時(shí)間,超過(guò)了這個(gè)時(shí)間(100毫秒),它們會(huì)被系統(tǒng)強(qiáng)行終止,并且系統(tǒng)還會(huì)向你匯報(bào)該函數(shù)結(jié)束的原因是因?yàn)槌瑫r(shí),這樣你可以發(fā)現(xiàn)這些Bug了。

  ★@Ignore:忽略的測(cè)試方法,標(biāo)注的含義是“某些方法尚未完成,暫不參與此次測(cè)試”;這樣的話測(cè)試結(jié)果會(huì)提示你有幾個(gè)測(cè)試被忽略,而不是失敗。一旦你完成了相應(yīng)函數(shù),只需要把@Ignore標(biāo)注刪去,可以進(jìn)行正常的測(cè)試。

  ★ @BeforeClass:針對(duì)所有測(cè)試,只執(zhí)行一次,且必須為static void;

  ★ @AfterClass:針對(duì)所有測(cè)試,只執(zhí)行一次,且必須為static void;

  所以一個(gè)Junit 4 的單元測(cè)試用例執(zhí)行順序?yàn)椋篅BeforeClass –> @Before –>@Test–> @After –> @AfterClass;每一個(gè)測(cè)試方法的調(diào)用順序?yàn)椋篅Before –>@Test–> @After。

  如下面例子:

  import static org.junit.Assert.*; importorg.junit.After;importorg.junit.AfterClass;importorg.junit.Before;importorg.junit.BeforeClass;importorg.junit.Ignore;importorg.junit.Test; public class JUnit4Test{

  @Before

  public void before() {

  System.out.println(@Before);

  }

  @Test

  public void test() {

  System.out.println(@Test);

  assertEquals(5 + 5, 10);

  }

  @Ignore

  @Test

  public void testIgnore() {

  System.out.println(@Ignore);

  }

  @Test(timeout = 50)

  public void testTimeout() {

  System.out.println(@Test(timeout = 50));

  assertEquals(5 + 5, 10);

  }

  @Test(expected = ArithmeticException.class)

  public void testExpected() {

  System.out.println(@Test(expected = Exception.class));

  throw new ArithmeticException();

  }

  @After

  public void after() {

  System.out.println(@After);

  }

  @BeforeClass

  public static void beforeClass() {

  System.out.println(@BeforeClass);

  };

  @AfterClass

  public static void afterClass() {

  System.out.println(@AfterClass);

  };

  };

上一頁(yè)1234下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd