您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
JUnit簡單使用教程
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時間:[ 2016/6/12 14:46:09 ] 推薦標(biāo)簽:單元測試 Junit 軟件測試工具

  Demo如下:
  @RunWith(Parameterized.class)
  public class SquareTest {
  private static Calculator calculator = new Calculator();
  private int param;//參數(shù)
  private int result;//期望值
  // 準(zhǔn)備數(shù)據(jù) 
  @Parameters  
  public static Collection data() {
  return Arrays.asList(new Object[][]{{2, 4},{0, 0},{-3, 9}});
  }
  //構(gòu)造函數(shù),對變量進(jìn)行初始化
  public SquareTest(int param, int result) {
  this.param = param;
  this.result = result;
  }
  @Test  
  public void square() {
  calculator.square(param);
  assertEquals(result, calculator.getResult());
  }
  }
  打包測試
  在一個項目中,只寫一個測試類是不可能的,我們會寫出很多很多個測試類?墒沁@些測試類必須一個一個的執(zhí)行,也是比較麻煩的事情。鑒于此,JUnit為我們提供了打包測試的功能,將所有需要運(yùn)行的測試類集中起來,一次性的運(yùn)行完畢,大大的方便了我們的測試工作。具體代碼如下:
  @RunWith(Suite.class)
  @Suite.SuiteClasses({ CalculatorTest.class,SquareTest.class})
  public class AllCalculatorTests{
  }
  大家可以看到,這個功能也需要使用一個特殊的Runner,因此我們需要向@RunWith注解傳遞一個參數(shù)Suite.class。同時,我們還需要另外一個注解@Suite.SuiteClasses,來表明這個類是一個打包測試類。我們把需要打包的類作為參數(shù)傳遞給該注解可以了。有了這兩個注解之后,已經(jīng)完整的表達(dá)了所有的含義,因此下面的類已經(jīng)無關(guān)緊要,隨便起一個類名,內(nèi)容全部為空既可。
  異常測試
  在JUnit 4之前,對錯誤的測試,我們只能通過fail來產(chǎn)生一個錯誤,并在try塊里面assertTrue(true)來測試。現(xiàn)在,可以通過@Test 注解中的expected屬性來測試異常。expected屬性的值是一個異常的類型。
  Demo如下:
  @Test(expected=ArithmeticException.class)
  public void testDivide() {
  new Calculator().divide(6, 0);
  }
  測試
  對于那些邏輯很復(fù)雜,循環(huán)嵌套比較深的程序,很有可能出現(xiàn)死循環(huán),因此一定要采取一些預(yù)防措施。測試是一個很好的解決方案。我們給這些測試方法設(shè)定一個執(zhí)行時間,超過了這個時間,他們會被系統(tǒng)強(qiáng)行終止,并且系統(tǒng)還會向你匯報該方法結(jié)束的原因是因為超時,這樣你可以發(fā)現(xiàn)這些Bug了。要實現(xiàn)這一功能,只需要給@Test 注解加一個timeout屬性,該注解傳入了一個時間(毫秒)給測試方法,如果測試方法在指定的時間之內(nèi)沒有運(yùn)行完,則測試失敗。
  Demo如下:  
  @Test(timeout=1000)
  public void testDeathLoop() {
  new Calculator().deathLoop();
  }
  單元測試運(yùn)行結(jié)果:java.lang.Exception: test timed out after 1000 milliseconds
  at test.Calculator.deathLoop(Calculator.java:25)
  at test.CaculatorTest.testDeathLoop(CaculatorTest.java:26)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  …………………………

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