天天看點

Junit Java單元測試

Junit是一種java單元測試的工具,讓我們的測試提高效率

入門篇

我們先來看一個測試加法add的例子

先建立一個AddOperation的類(我們要測試的類)

package work;

publicclass

AddOperation {

publicint add(int

x,int y){

return x+y;

    }

}

給該類添加測試類

詳細請看圖

Junit Java單元測試
Junit Java單元測試

選擇你要測試的類

Junit Java單元測試

importstatic

org.junit.Assert.*;

import org.junit.AfterClass;

import org.junit.BeforeClass;

import org.junit.Test;

AddOperationTest {

    @BeforeClass

    publicstaticvoid

setUpBeforeClass()throws Exception {

    @AfterClass

tearDownAfterClass()throws Exception {

    @Test

    publicvoid

testAdd() {

        fail("Not yet implemented");

@是Fixture(暫且翻譯為“固定代碼段”)标注,用于表明和分類,根據@後面的名字能确定某個方法的作用,它的引入讓函數方法的名字可以随便寫,編譯器根據@來确定方法的用途

下面介紹一些常見的需要熟悉的标注

@Before:

使用了該中繼資料的方法在每個測試方法執行之前都要執行一次。

@After:

使用了該中繼資料的方法在每個測試方法執行之後要執行一次。

注意:@Before和@After标示的方法隻能各有一個。這個相當于取代了JUnit以前版本中的setUp和tearDown方法,當然你還可以繼續叫這個名字,不過JUnit不會霸道的要求你這麼做了

@BeforeClass和@AfterClass

在測試用例初始化時執行@BeforeClass方法,當所有測試執行完畢之後,執行@AfterClass進行收尾工作,新的版本一般用@BeforeClass和

@AfterClass代替@Before和@After,對于多個@Test的程式,每次Test之前都會執行@Before,如果要導入一個很大的測試檔案,絕大部分時間都花在了導入資料上,而@BeforeClass隻要導入資料一次就行,

@Test(expected=*.class)

在JUnit4.0之前,對錯誤的測試,我們隻能通過fail來産生一個錯誤,并在try塊裡面assertTrue(true)來測試。現在,通過@Test中繼資料中的expected屬性。expected屬性的值是一個異常的類型

@Test(timeout=xxx):

該中繼資料傳入了一個時間(毫秒)給測試方法,

如果測試方法在制定的時間之内沒有運作完,則測試也失敗。

@ignore:

該中繼資料标記的測試方法在測試中會被忽略。當測試的方法還沒有實作,或者測試的方法已經過時,或者在某種條件下才能測試該方法(比如需要一個資料庫聯接,而在本地測試的時候,資料庫并沒有連接配接),那麼使用該标簽來标示這個方法。同時,你可以為該标簽傳遞一個String的參數,來表明為什麼會忽略這個測試方法。比如:@lgnore(“該方法還沒有實作”),在執行的時候,僅會報告該方法沒有實作,而不會運作測試方法。

進階篇

上面的測試隻能進行單組測試,如何進行多組測試呢?

下面開始介紹,參考以下代碼,差不多算個模闆吧。

//頭檔案一大堆,想了解更透徹的可以自己上網查資料

import java.util.Arrays;

import java.util.Collection;

importorg.junit.After;

importorg.junit.AfterClass;

importorg.junit.Before;

import org.junit.runners.*;

import org.junit.runners.Parameterized.Parameters;

import org.junit.runner.*;

@RunWith(Parameterized.class)

    //先建一個要測試的類

    privatestatic

AddOperationtemp =new AddOperation(); 

    //測試類要生成的資料

    privateinta,b;

    privateintresult; 

    @Parameters    

    publicstaticCollection

data(){//測試資料都放在這裡

    //Object是一個二維對象,第一維表示可以多組測試

    //還有一維,分别放了輸入資料,結果資料(輸入,輸出資料可能都有多個)

    //這裡輸入資料有兩個,輸出資料有一個

return Arrays.asList(new Object[][]{

            {1, 2, 3},

            {2, 3, 4},

            {3, 4, 5}

        });

    //構造函數,對變量進行初始化,這個函數會多次調用,

    //每次調用自動讀取Collection

data内的一組資料

    public

AddOperationTest(int a,

int b,int result){

        this.a

= a;

        this.b

= b;

        this.result

= result;

   }

   @Test

   publicvoid

test() {//測試,自動捕捉不正确的測試資料

       assertEquals(result,temp.add(a,b));

點選運作

Junit Java單元測試

看運作結果,測試組數編号從0開始,第0組通過(綠色表示通過), 第1, 2組沒有通過(紅色表示沒通過)

如果全部通過,總的進度條會變綠,自己可以動手試一下。

Junit Java單元測試