Junit的使用

  在java中,單元測試是指類的測試,重點是測試類中的方法是否按照設計的邏輯運行。一個測試用例主要有如下步驟:java

  1. 輸入參數。方法須要的參數。
  2. 期待值。方法是本身設計的,對於輸入,本身知道應該輸出什麼。
  3. 實際值。方法使用輸入參數後實際上輸出的值。
  4. 斷言,判斷期待值和實際值是否相等。使用斷言判斷期待值和實際值是否相等,不相等則會拋出異常,測試失敗。

  測試大概能夠分爲兩類:無依賴和有依賴的。無依賴,是指要測試類再也不依賴其餘本身要編寫的類,主要是工具類。能夠直接使用Junit測試。有依賴,是指存在調用關係,例如Service層調用DAO。對於這種測試,須要進行隔離,就是說當前只測試Service層,那麼默認爲DAO層是能夠正常工做的,對於DAO層的方法須要進行模擬。通常用的框架有Mocktio、EasyMock、PowerMock。  框架

  Junit是用於編寫單元測試的框架。對於已經寫好的函數,可使用Junit生成單元測試代碼。ide

  本身的環境是:Linux函數

  Java環境是:JDK1.7工具

  IDE:Eclipse Java EE IDE for Web Developers.Version: Mars.2 Release (4.5.2) Build id: 20160218-0600性能

使用步驟單元測試

1、新建項目,命名爲JUnit_Test,編寫了一個用於計算的類:Calcutor,代碼中故意留下一些問題,便於測試。代碼以下:測試

 1 package com.test.unit;
 2 
 3 public class Calculator{
 4 
 5     // 加法
 6     public int add(int a, int b){
 7         return a + b;
 8     }
 9 
10     // 減法
11     public int substract(int a, int b){
12         return a + b; // Bug: 正確的應該是a-b
13     }
14 
15     // 乘法
16     public int multiply(int a, int b) {
17         try{
18             Thread.sleep(300);//用於性能測試
19         }catch (InterruptedException e){
20             // TODO Auto-generated catch block
21             e.printStackTrace();
22         }
23         return a * b;
24     }
25 
26     // 除法
27     public int divide(int a, int b) throws ArithmeticException{
28         if (b == 0){
29             throw new ArithmeticException();
30         }
31         return a / b;
32     }
33 
34     // 平方根
35     public void squareRoot(int n) {
36         for (;;)
37             ; // Bug : 死循環
38     }
39 }

 

2、引入Junit庫。選中項目,右鍵——Build Path——Add Libraries,選擇JUnit,引入的包以下:ui









3、生成測試類。選中 Calcutor.java,右鍵——New——JUnit Test Casespa




















選擇setUp,再下一步,選擇要進行測試的方法,及生成了選擇的函數的測試用例,再根據須要本身編寫代碼。

主要測試類型有三種:

  (1)常規的計算測試。調用函數計算值,輸入本身指望的值,以及出錯信息。若是調用函數計算的值與本身指望的值不相等,則拋出出錯信息。

  (2)用於性能測試。要讓一個方法,200毫秒裏運行完,若是這個方法200毫秒不能運行完,那麼這個方法就應該拋出異常。

  (3)異常測試。期待拋出異常,若是沒有拋出異常,則報錯。

測試代碼以下:

 1 package com.test.unit;
 2 
 3 import static org.junit.Assert.*;
 4 
 5 import org.junit.Before;
 6 import org.junit.Test;
 7 
 8 public class CalculatorTest{
 9 
10     Calculator cal;
11 
12    //每一個方法執行前會執行
13     @Before
14     public void setUp() throws Exception{
15         cal = new Calculator();
16     }
17 
18     //測試方法,以test開始
19     @SuppressWarnings("deprecation")
20     @Test
21     public void testAdd(){
22         int rel = cal.add(10, 5);//調用函數計算的值
23         assertEquals("加法有問題", 15, rel);//傳入計算的值,本身指望的值,出錯信息
24     }
25 
26     @Test
27     public void testSubstract(){
28         int rel = cal.substract(20, 5);
29         assertEquals("減法有問題", 16, rel);
30     }
31 
32     // 用於性能測試
33     // 要讓一個方法,200毫秒裏運行完,若是這個方法200毫秒不能運行完,那麼這個方法就應該拋出異常
34     @Test(timeout = 200)
35     public void testMultiply(){
36         int rel = cal.multiply(2, 4);
37         assertEquals("乘法有問題", 8, rel);
38     }
39 
40     //異常測試
41     @Test(expected = ArithmeticException.class)
42     public void testDivide(){
43         int rel = cal.divide(10, 0);
44         assertEquals("除法有問題", 5, rel);
45     }
46 
47 }

 

4、完成測試代碼的編寫後,包管理器中選中CalculatorTest,右鍵——Run as——JUnit Test,進行測試,測試結果以下:
























 

根據報錯信息再修改本身的代碼。

 

其餘註解

 

 @Ignore:忽略的測試方法,標註的含義就是「某些方法還沒有完成,咱不參與這次測試」;這樣的話測試結果就會提示你有幾個測試被忽略,而不是失敗。一旦你完成了相應的函數,只須要把 @Ignore 註解刪除便可,就能夠進行正常測試了。固然,這個 @Ignore 註解對於像我這樣有「強迫症」的人仍是大有意義的。每當看到紅色條(測試失敗)的時候就會全身不舒服,感受沒法忍受(除非要測試的目的就是讓它失敗)。固然,對代碼也是同樣,沒法忍受那些雜亂不堪的代碼。

 

@BeforeClass:針對全部測試,也就是整個測試類中,在全部測試方法執行前,都會先執行由它註解的方法,並且只執行一次。固然,須要注意的是,修飾符必須是 public static void xxxx ;此 Annotation 是 JUnit 4 新增的功能。

 

@AfterClass:針對全部測試,也就是整個測試類中,在全部測試方法都執行完以後,纔會執行由它註解的方法,並且只執行一次。固然,須要注意的是,修飾符也必須是 public static void xxxx ;此 Annotation 也是 JUnit 4 新增的功能,與 @BeforeClass 是一對。

相關文章
相關標籤/搜索