91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Java中利用JUnit實現一個單元測試功能

發布時間:2020-12-08 15:42:49 來源:億速云 閱讀:155 作者:Leah 欄目:編程語言

怎么在Java中利用JUnit實現一個單元測試功能?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

單元測試是編寫測試代碼,應該準確、快速地保證程序基本模塊的正確性。

JUnit是Java單元測試框架,已經在Eclipse中默認安裝。

JUnit4

JUnit4通過注解的方式來識別測試方法。目前支持的主要注解有:

  • @BeforeClass 全局只會執行一次,而且是第一個運行
  • @Before 在測試方法運行之前運行
  • @Test 測試方法
  • @After 在測試方法運行之后允許
  • @AfterClass 全局只會執行一次,而且是最后一個運行
  • @Ignore 忽略此方法

下面基于Eclipse介紹JUnit的基本應用

基本測試

1.新建一個項目叫JUnitTest,我們編寫一個Calculator類,這是一個能夠簡單實現加減乘除、平方、開方的計算器類,然后對這些功能進行單元測試。

public class Calculator {
  private static int result; // 靜態變量,用于存儲運行結果
  public void add(int n) {
    result = result + n;
  }
  public void substract(int n) {
    result = result - 1; //Bug: 正確的應該是 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 (; ;) ;      //Bug : 死循環
  }
  public void clear() {   // 將結果清零
    result = 0;
  }
  public int getResult(){
    return result;
  }
}

1.將JUnit4單元測試包引入這個項目:在該項目上點右鍵,點“屬性”,如圖

怎么在Java中利用JUnit實現一個單元測試功能

在彈出的屬性窗口中,首先在左邊選擇“Java Build Path”,然后到右上選擇“Libraries”標簽,之后在最右邊點擊“Add Library…”按鈕,如下圖所示

怎么在Java中利用JUnit實現一個單元測試功能

怎么在Java中利用JUnit實現一個單元測試功能

怎么在Java中利用JUnit實現一個單元測試功能

然后在新彈出的對話框中選擇JUnit4并點擊確定,如上圖所示,JUnit4軟件包就被包含進我們這個項目了。
2.生成JUnit測試框架:在Eclipse的Package Explorer中用右鍵點擊該類彈出菜單,選擇“New JUnit Test Case”。如下圖所示:

怎么在Java中利用JUnit實現一個單元測試功能

怎么在Java中利用JUnit實現一個單元測試功能

怎么在Java中利用JUnit實現一個單元測試功能

點擊“下一步”后,系統會自動列出你這個類中包含的方法,選擇你要進行測試的方法。此例中,我們僅對“加、減、乘、除”四個方法進行測試。

怎么在Java中利用JUnit實現一個單元測試功能

之后系統會自動生成一個新類CalculatorTest,里面包含一些空的測試用例。你只需要將這些測試用例稍作修改即可使用。
 完整的CalculatorTest代碼如下:

public class CalculatorTest {  
  private static Calculator calculator = new Calculator();

  @Before
  public void setUp() throws Exception {
    calculator.clear();
  }

  @Test
  public void testAdd() {
    calculator.add(3);
    calculator.add(4);
    assertEquals(7, calculator.getResult());

  }

  @Test
  public void testSubstract() {
    calculator.add(8);
    calculator.substract(3);
    assertEquals(5, calculator.getResult());

  }

  @Ignore("Multiply() Not yet implemented")
  @Test
  public void testMultiply() {
    fail("Not yet implemented");
  }

  @Test
  public void testDivide() {
    calculator.add(8);
    calculator.divide(2);
    assertEquals(4, calculator.getResult());

  }

}

1.運行測試代碼:按照上述代碼修改完畢后,我們在CalculatorTest類上點右鍵,選擇“Run As a JUnit Test”來運行我們的測試,如下圖所示

怎么在Java中利用JUnit實現一個單元測試功能

運行結果如下:

怎么在Java中利用JUnit實現一個單元測試功能

進度條是紅顏色表示發現錯誤,具體的測試結果在進度條上面有表示“共進行了4個測試,其中1個測試被忽略,一個測試失敗”。

限時測試

對于那些邏輯很復雜,循環嵌套比較深的程序,很有可能出現死循環,因此一定要采取一些預防措施。限時測試是一個很好的解決方案。我們給這些測試函數設定一個執行時間,超過了這個時間,他們就會被系統強行終止,并且系統還會向你匯報該函數結束的原因是因為超時,這樣你就可以發現這些Bug了。要實現這一功能,只需要給@Test標注加一個參數即可,代碼如下:

  @Test(timeout = 1000)
  public void squareRoot() {
    calculator.squareRoot(4);
    assertEquals(2, calculator.getResult());
  }

Timeout參數表明了你要設定的時間,單位為毫秒,因此1000就代表1秒。

怎么在Java中利用JUnit實現一個單元測試功能

怎么在Java中利用JUnit實現一個單元測試功能

測試異常

JAVA中的異常處理也是一個重點,因此你經常會編寫一些需要拋出異常的函數。那么,如果你覺得一個函數應該拋出異常,但是它沒拋出,這算不算Bug呢?這當然是Bug,并JUnit也考慮到了這一點,來幫助我們找到這種Bug。例如,我們寫的計算器類有除法功能,如果除數是一個0,那么必然要拋出“除0異常”。因此,我們很有必要對這些進行測試。代碼如下:

 @Test(expected = ArithmeticException.class)
 public void divideByZero(){
    calculator.divide(0);
  }

如上述代碼所示,我們需要使用@Test標注的expected屬性,將我們要檢驗的異常傳遞給他,這樣JUnit框架就能自動幫我們檢測是否拋出了我們指定的異常。

參數化測試

我們可能遇到過這樣的函數,它的參數有許多特殊值,或者說他的參數分為很多個區域。

例如,測試一下“計算一個數的平方”這個函數,暫且分三類:正數、0、負數。在編寫測試的時候,至少要寫3個測試,把這3種情況都包含了,這確實是一件很麻煩的事情。測試代碼如下:

  public class AdvancedTest { 
    private static Calculator calculator = new Calculator();
    @Before
    public void clearCalculator(){
      calculator.clear();
    }

    @Test
    public void square1() {
      calculator.square(2);
      assertEquals(4, calculator.getResult());
    }   

    @Test  
    public void square2(){
      calculator.square(0);
      assertEquals(0, calculator.getResult());
    }

    @Test  
    public void square3(){
      calculator.square(-3);
      assertEquals(9, calculator.getResult());
    }
   }

為了簡化類似的測試,JUnit4提出了“參數化測試”的概念,只寫一個測試函數,把這若干種情況作為參數傳遞進去,一次性的完成測試。代碼如下:

  @RunWith(Parameterized.class)
  public class SquareTest{
    private static Calculator calculator = new Calculator();
    private int param;
    private int result;   

  @Parameters  
  public static Collection data() {
    return Arrays.asList(new Object[][]{
        {2, 4},
        {0, 0},
        {-3, 9},
    });
  }

  //構造函數,對變量進行初始化
  public SquareTest(int param, int result){
    this.param = param;
      this.result = result;
  }

  @Test  
  public void square(){
    calculator.square(param);
    assertEquals(result, calculator.getResult());
  }
 }

執行了3次該測試類,依次采用了數據集合中的數據{處理值,預期處理結果},結果如下:

怎么在Java中利用JUnit實現一個單元測試功能

代碼分析如下:

  • 為這種測試專門生成一個新的類,而不能與其他測試共用同一個類,此例中我們定義了一個SquareTest類。
  • 為這個類指定一個Runner,而不能使用默認的Runner,@RunWith(Parameterized.class)這條語句就是為這個類指定了一個ParameterizedRunner
  • 定義一個待測試的類,并且定義兩個變量,一個用于存放參數,一個用于存放期待的結果。
  • 定義測試數據的集合,也就是上述的data()方法,該方法可以任意命名,但是必須使用@Parameters標注進行修飾。
  • 定義構造函數,其功能就是對先前定義的兩個參數進行初始化

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兰州市| 栾川县| 双峰县| 都匀市| 龙州县| 宁波市| 新源县| 长寿区| 阿拉尔市| 台东县| 牟定县| 蛟河市| 成都市| 如东县| 紫金县| 印江| 北安市| 韩城市| 和静县| 龙江县| 井冈山市| 吉隆县| 会宁县| 柳州市| 北海市| 永胜县| 毕节市| 雅安市| 京山县| 霍林郭勒市| 盱眙县| 聂荣县| 仙桃市| 南宫市| 施秉县| 洪湖市| 凤山市| 靖西县| 肥西县| 修文县| 邢台市|