• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    全面認識JUnit 4的新特征

    發布: 2007-6-22 07:38 | 作者:   | 來源: 天極開發  | 查看: 17次 | 進入軟件測試論壇討論

    領測軟件測試網

    下一頁 1 2 3 4 

       提要 本文將向你介紹如何實現從JUnit 3.8向JUnit 4的遷移。同時,還討論JUnit 4中的一些新特征,特別包括對注解的使用;最后,簡要介紹這個新版本的IDE集成現狀。

      一、 引言

      在本文開始,我將假定,你已經了解由Kent Beck和Erich Gamma發明的這個Java單元測試框架并因此而略過必要的簡介。所以,我將集中分析從JUnit 3.8到最新版本-JUnit 4的遷移過程以及其在IDE和Ant中的集成。

      JUnit 4是一種與其之前的版本完全不同的API,它根據Java 5.0中的新特征(注解,靜態導入等)構建而成。如你所見,JUnit 4更簡單、更豐富和更易于使用,而且它引入了更為靈活的初始化和清理工作,還有限時的和參數化測試用例。

      代碼實例最能說明問題。因此,在本文中,我將使用一個例子來展示不同的測試用例:一個計算器。該示例計算器很簡單,效率并不高,甚至還有一些錯誤;它僅僅操作整數,并且把結果存儲在一個靜態變量中。Substract方法并不返回一個有效的結果,而且也沒有實現乘法運算,而且看上去在squareRoot方法中還存在一個錯誤:無限循環。這些錯誤將幫助說明使用JUnit 4進行測試的有效性。你可以打開和關閉這個計算器,而且你可以清除這些結果。下面是其實現代碼:

    package calc;
    public class Calculator {
     private static int result; //存儲結果的靜態變量
     public void add(int n) {
      result = result + n;
     }
     public void substract(int n) {
      result = result - 1; //錯誤:應該是"result = result - n"
     }
     public void multiply(int n) {} //還沒實現
     public void divide(int n) {
      result = result / n;
     }
     public void square(int n) {
      result = n * n;
     }
     public void squareRoot(int n) {
      for (; ;) ; //錯誤:無限循環
     }
     public void clear() { //清除結果
      result = 0;
     }
     public void switchOn() { //打開屏幕,顯示"hello",并報警
      result = 0; //實現其它的計算器功能
     }
     public void switchOff() { } //顯示"bye bye",報警,并關閉屏幕
     public int getResult() {
      return result;
     }
    }

      二、 遷移一個測試類

      現在,我將把一個已經使用JUnit 3.8編寫成的簡單的測試類遷移到JUnit 4。這個類有一些缺陷:它沒有測試所有的業務方法,而且看上去在testDivide方法中還存在一個錯誤(8/2不等于5)。因為還沒有實現乘法運算功能,所以對其測試將被忽略。

      下面,我們把兩個版本的框架之間的差別以粗體顯示出現于表格1中。

      表格1.分別以JUnit 3.8和JUnit 4實現的CaculatorTest。

      JUnit 3.8

    package junit3;
    import calc.Calculator;
    import junit.framework.TestCase;
    public class CalculatorTest extends TestCase {
     private static Calculator calculator = new Calculator();
     @Override protected void setUp() { calculator.clear(); }
     public void testAdd() {
      calculator.add(1);
      calculator.add(1);
      assertEquals(calculator.getResult(), 2);
     }
     public void testSubtract() {
      calculator.add(10);
      calculator.subtract(2);
      assertEquals(calculator.getResult(), 8);
     }
     public void testDivide() {
      calculator.add(8);
      calculator.divide(2);
      assert calculator.getResult() == 5;
     }
     public void testDivideByZero() {
      try {
       calculator.divide(0);
       fail();
      }
      catch (ArithmeticException e) { }
     }
     public void notReadyYetTestMultiply() {
      calculator.add(10);
      calculator.multiply(10);
      assertEquals(calculator.getResult(), 100);
     }
    }

      JUnit 4

    package JUnit 4;
    import calc.Calculator;
    import org.junit.Before;
    import org.junit.Ignore;
    import org.junit.Test;
    import static org.junit.Assert.*;
    public class CalculatorTest {
     private static Calculator calculator = new Calculator();
     @Before public void clearCalculator() {
      calculator.clear();
     }
     @Test public void add() {
      calculator.add(1);
      calculator.add(1);
      assertEquals(calculator.getResult(), 2);
     }
     @Test public void subtract() {
      calculator.add(10);
      calculator.subtract(2);
      assertEquals(calculator.getResult(), 8);
     }
     @Test public void divide() {
      calculator.add(8);
      calculator.divide(2);
      assert calculator.getResult() == 5;
     }
     @Test(expected = ArithmeticException.class)
     public void divideByZero() {
      calculator.divide(0);
     }
     @Ignore("not ready yet")
     @Test
     public void multiply() {
      calculator.add(10);
      calculator.multiply(10);
      assertEquals(calculator.getResult(), 100);
     }
    }

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>