jUnit4單元測試詳解

在jUnit單元測試中常用的註解有以下:
@BeforeClass 同時運行單元測試中的多個方法時,最先被執行,且只執行一次.
@Before 執行所有的@Test標註的方法之前都會被執行;
@Test 標註方法爲測試方法.
@After 執行所有的@Test標註的方法之後都會被執行; 同@Before
@AfterClass 同時運行單元測試中的多個方法時,最後被執行,且只執行一次. 同@BeforeClass
如果想打印當前正在測試的方法名稱,此時需要另一個註解@Rule,將它標註在TestName tm = new TestName()上

在我們測試一個類的多個方法時,爲了區分開來,正在測試的哪個方法,會把正在執行測試的方法名稱打印輸出.

現在有這樣一種場景,要測試一個List接口中的多個方法,同時要告訴用戶現在在測試哪個方法,有沒有結束等…

我們需要對集合進行初始化,如果每個測試方法中都對集合初始化,代碼重複部分較多,不便閱讀.
此時可以將初始化部分放到@BeforeClass標註的方法中,只執行一次;
所有的測試方法執行前都將方法名稱打印輸出,執行後都提示執行完成.
而所有的@Test標註的方法中只需要完成核心業務,代碼清晰易讀.
單元測試的代碼如下:

package test;

import java.util.ArrayList;
import java.util.List;

import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;

public class TestJavaSort {
    static List<Integer> list = new ArrayList<Integer>();
    //此處要求訪問級別爲public
    //如果不寫訪問修飾符,運行後會報驗證錯誤(ValidationError) , The @Rule 'tm' must be public.
    @Rule
    public TestName tm = new TestName();

    @BeforeClass
    public static void init(){
        System.out.println("init method(),這裏的代碼只執行一次");
        list.add(10);
        list.add(5);
        list.add(9);
        list.add(4);
        list.add(5);
        System.out.println(list);
    }

    @Before
    public void before(){
        System.out.println(tm.getMethodName() + " method start test...");
    }


    @Test
    public void testAdd(){
        list.add(15);
    }

    @Test
    public void testRemove(){
        list.remove(0);
    }

    @After
    public void after(){
        System.out.println(list);
        System.out.println(tm.getMethodName() + "method test end!");
    }


    @AfterClass
    public static void afterClass(){
        System.out.println("所有的test方法已測試完成.");
    }
}

單元測試運行結果如下:

init method(),這裏的代碼只執行一次
[10, 5, 9, 4, 5]
testAdd method start test...
[10, 5, 9, 4, 5, 15]
testAddmethod test end!
testRemove method start test...
[5, 9, 4, 5, 15]
testRemovemethod test end!
所有的test方法已測試完成.  這裏也只執行一次.

注:@BeforeClass和@AfterClass標註的方法必須是static類型的,即靜態方法.其它方法不做限制.
因爲每運行一個@Test方法,就會爲該測試類新建一個新的實例。而@BeforeClass是在實例創建之前,@AfterClass是在實例銷燬之後,因此在沒有實例還要執行的情況下,需要將方法改爲static類型.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章