您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源單元測(cè)試工具 > junit
Junit測(cè)試預(yù)期異常
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2014/9/30 13:48:48 ] 推薦標(biāo)簽:Junit 測(cè)試 開源軟件測(cè)試

  開發(fā)人員常常使用單元測(cè)試來(lái)驗(yàn)證的一段兒代碼的操作,很多時(shí)候單元測(cè)試可以檢查拋出預(yù)期異常( expected exceptions)的代碼。在Java語(yǔ)言中,JUnit是一套標(biāo)準(zhǔn)的單元測(cè)試方案,它提供了很多驗(yàn)證拋出的異常的機(jī)制。本文探討一下他們的優(yōu)點(diǎn)。
  我們拿下面的代碼作為例子,寫一個(gè)測(cè)試,確保canVote() 方法返回true或者false, 同時(shí)你也能寫一個(gè)測(cè)試用來(lái)驗(yàn)證這個(gè)方法拋出的IllegalArgumentException異常。
  public class Student {
  public boolean canVote(int age) {
  if (i<=0) throw new IllegalArgumentException("age should be +ve");
  if (i<18) return false;
  else return true;
  }
  }
  (Guava類庫(kù)中提供了一個(gè)作參數(shù)檢查的工具類--Preconditions類,也許這種方法能夠更好的檢查這樣的參數(shù),不過(guò)這個(gè)例子也能夠檢查)。
  檢查拋出的異常有三種方式,它們各自都有優(yōu)缺點(diǎn):
  1.@Test(expected…)
  @Test注解有一個(gè)可選的參數(shù),"expected"允許你設(shè)置一個(gè)Throwable的子類。如果你想要驗(yàn)證上面的canVote()方法拋出預(yù)期的異常,我們可以這樣寫:
  @Test(expected = IllegalArgumentException.class)
  public void canVote_throws_IllegalArgumentException_for_zero_age() {
  Student student = new Student();
  student.canVote(0);
  }
  簡(jiǎn)單明了,這個(gè)測(cè)試有一點(diǎn)誤差,因?yàn)楫惓?huì)在方法的某個(gè)位置被拋出,但不一定在特定的某行。
  2.ExpectedException
  如果要使用JUnit框架中的ExpectedException類,需要聲明ExpectedException異常。
  @Rule
  public ExpectedException thrown= ExpectedException.none();
  然后你可以使用更加簡(jiǎn)單的方式驗(yàn)證預(yù)期的異常。
  @Test
  public void canVote_throws_IllegalArgumentException_for_zero_age() {
  Student student = new Student();
  thrown.expect(NullPointerException.class);
  student.canVote(0);
  }
  或者可以設(shè)置預(yù)期異常的屬性信息。
  @Test
  public void canVote_throws_IllegalArgumentException_for_zero_age() {
  Student student = new Student();
  thrown.expect(IllegalArgumentException.class);
  thrown.expectMessage("age should be +ve");
  student.canVote(0);
  }

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