Junit 入門使用教程

做者: YSOcean
 
 

 

目錄html

 


一、Junit 是什麼?

  JUnit是一個Java語言的單元測試框架。它由Kent Beck和Erich Gamma創建,逐漸成爲源於Kent Beck的sUnit的xUnit家族中最爲成功的一個JUnit有它本身的JUnit擴展生態圈。多數Java的開發環境都已經集成了JUnit做爲單元測試的工具。java

  注意:Junit 測試也是程序員測試,即所謂的白盒測試,它須要程序員知道被測試的代碼如何完成功能,以及完成什麼樣的功能程序員

 

二、Junit 能作什麼?

  咱們知道 Junit 是一個單元測試框架,那麼使用 Junit 能讓咱們快速的完成單元測試。框架

  一般咱們寫完代碼想要測試這段代碼的正確性,那麼必須新建一個類,而後建立一個 main() 方法,而後編寫測試代碼。若是須要測試的代碼不少呢?那麼要麼就會建不少main() 方法來測試,要麼將其所有寫在一個 main() 方法裏面。這也會大大的增長測試的複雜度,下降程序員的測試積極性。而 Junit 能很好的解決這個問題,簡化單元測試,寫一點測一點,在編寫之後的代碼中若是發現問題能夠較快的追蹤到問題的緣由,減少迴歸錯誤的糾錯難度。eclipse

 

三、Junit 的用法

  1、首先下載 Junit jar 包,這裏給兩個版本的百度雲下載地址:函數

  ①、Junit 4.12版本    連接:http://pan.baidu.com/s/1c2cRqdM 密碼:hfix工具

  ②、Junit 4.8 版本     連接:http://pan.baidu.com/s/1qY8WVGK 密碼:ma2u單元測試

  

  2、下載完成以後,在項目中將 下載的 jar 包放進去,而後右鍵,Build--->Add Build Path  便可。測試

  

 

   若是你是用 eclipse 開發,也能夠不用下載那些jar包,eclipse內部集成了,咱們只須要引入便可:ui

    ①、選中項目,右鍵Build--->Add Library

      

 

    ②、彈出來的界面,選中 JUnit,點擊 next

      

 

     ③、選中 Junit 的版本,通常咱們都用 4.0 以上的。點擊 Finish

       

 

   

  3、咱們先看下面這個例子,看一下 Junit 的用法

  ①、編寫代碼(須要測試的類)

public class Calculator {
     
    /**
     * 傳入兩個參數,求和
     * @param a
     * @param b
     * @return
     */
    public int add(int a,int b){
         
        return a+b;
    }
     
    /**
     * 傳入兩個參數,求差
     * @param a
     * @param b
     * @return
     */
    public int sub(int a,int b){
         
        return a-b;
    }
 
}

  

②、編寫測試類

    1、不用Junit 

public class CalculatorTest {
 
    public static void main(String[] args) {
        Calculator c = new Calculator();
        //測試 add()方法
        int result = c.add(1, 2);
        if(result == 3){
            System.out.println("add()方法正確");
        }
         
        //測試 sub()方法
        int result2 = c.sub(2, 1);
        if(result2 == 1){
            System.out.println("sub()方法正確");
        }
         
    }
}

  

那麼咱們能夠看到,不用 Junit 只能寫在 main()方法中,經過運行結果來判斷測試結果是否正確。這裏須要測試的只有兩個方法,若是有不少方法,那麼測試代碼就會變得很混亂。

 

    2、使用 Junit(看不懂 Assert.assertEquals()方法不要緊,能夠本身寫 if()語句來判斷)

public class CalculatorTest {
     
    @Test
    //測試 add()方法
    public void testAdd(){
        Calculator c = new Calculator();
        int result = c.add(1, 2);
        Assert.assertEquals(result, 3);
    }
     
    @Test
    //測試 sub()方法
    public void testSub(){
        Calculator c = new Calculator();
        int result = c.sub(2, 1);
        Assert.assertEquals(result, 1);
    }
 
}

  如何運行 Junit呢?鼠標放在須要測試的方法中,右鍵,Run As ---->JUnit Test

 

結果出現以下的綠色橫條,則測試經過,紅色橫條,則測試失敗

那麼由上面能夠看到,使用 Junit 不須要建立 main() 方法,並且每一個測試方法一一對應,邏輯特別清晰。可能有讀者會問,這樣寫代碼量也並不會減小啊,那麼你接着往下看:

 

首先介紹 Junit 的幾種相似於 @Test 的註解:

  1.@Test: 測試方法

    a)(expected=XXException.class)若是程序的異常和XXException.class同樣,則測試經過
    b)(timeout=100)若是程序的執行能在100毫秒以內完成,則測試經過

  2.@Ignore: 被忽略的測試方法:加上以後,暫時不運行此段代碼

  3.@Before: 每個測試方法以前運行

  4.@After: 每個測試方法以後運行

  5.@BeforeClass: 方法必須必需要是靜態方法(static 聲明),全部測試開始以前運行,注意區分before,是全部測試方法

  6.@AfterClass: 方法必需要是靜態方法(static 聲明),全部測試結束以後運行,注意區分 @After

 

 那麼上面的例子,咱們能夠看到,每一個 @Test 方法中都有 Calculator c = new Calculator();即類的實例化,那麼咱們能夠將其放入到 @Before 中

public class CalculatorTest {
    Calculator c = null;
     
    @Before
    public void testBeforeClass(){
        c = new Calculator();
    }
    @Test
    //測試 add()方法
    public void testAdd(){
        int result = c.add(1, 2);
        //Assert.assertEquals(result, 3);
        //等價於:
        if(result == 3){
            System.out.println("add()方法正確");
        }
    }
     
    @Test
    //測試 sub()方法
    public void testSub(){
        int result = c.sub(2, 1);
        //Assert.assertEquals(result, 1);
        //等價於:
        if(result == 1){
            System.out.println("sub()方法正確");
        }
    }
 
}

  同理:別的註解用法咱們用一個類來看:

public class JunitTest {
    public JunitTest() {
        System.out.println("構造函數");
    }
 
    @BeforeClass
    public static void beforeClass(){
        System.out.println("@BeforeClass");
    }
     
    @Before
    public void befor(){
        System.out.println("@Before");
    }
     
    @Test
    public void test(){
        System.out.println("@Test");
    }
     
    @Ignore
    public void ignore(){
        System.out.println("@Ignore");
    }
     
    @After
    public void after(){
        System.out.println("@After");
    }
     
    @AfterClass
    public static void afterClass(){
        System.out.println("@AfterClass");
    }
}

  結果爲:

@BeforeClass
構造函數
@Before
@Test
@After
@AfterClass

  

注意:編寫測試類的原則: 

    ①測試方法上必須使用@Test進行修飾

        ②測試方法必須使用public void 進行修飾,不能帶任何的參數

        ③新建一個源代碼目錄來存放咱們的測試代碼,即將測試代碼和項目業務代碼分開

        ④測試類所在的包名應該和被測試類所在的包名保持一致

        ⑤測試單元中的每一個方法必須能夠獨立測試,測試方法間不能有任何的依賴

        ⑥測試類使用Test做爲類名的後綴(不是必須)

        ⑦測試方法使用test做爲方法名的前綴(不是必須)

 

public  class  JunitTest {
     public  JunitTest() {
         System.out.println( "構造函數" );
     }
 
     @BeforeClass
     public  static  void  beforeClass(){
         System.out.println( "@BeforeClass" );
     }
     
     @Before
     public  void  befor(){
         System.out.println( "@Before" );
     }
     
     @Test
     public  void  test(){
         System.out.println( "@Test" );
     }
     
     @Ignore
     public  void  ignore(){
         System.out.println( "@Ignore" );
     }
     
     @After
     public  void  after(){
         System.out.println( "@After" );
     }
     
     @AfterClass
     public  static  void  afterClass(){
         System.out.println( "@AfterClass" );
     }
}
相關文章
相關標籤/搜索