工欲善其事必先利其器-------Junit的使用

一.什麼是Junitjavascript

Junit是一個開源的Java測試框架,用於編寫和運行重複的使用的測試用例,它是由<<設計模式:可複用面向對象軟件的基礎>的>做者Erich Gamma和Kent Beck開發的。java

二.Junit中重要的概念和類:設計模式

(1)TestCaseapi

當一個類繼承自TestCase,即成爲一個測試類,它包含有testXXXX形式的測試方法。框架

(2)TestSuiteclipse

將相關的測試納入一組,將多個測試方法納入一個test suit。若是沒有編寫test Suit的話,系統會默認爲每一個test case生成一個test Suite。ide

(3)Test Runner函數

用於執行TestSuit。單元測試

(4)TestResult測試

用用包含測試中發生的錯誤,次數等。

(5)Assert

用於檢測條件是否成立。

常見有以下幾個:

斷言方法 說明
assertTrue/False 判斷條件是true仍是false
assertEquals() 判斷是否相等
assertNotNull()/Null() 判斷對象是否爲空
assertSame()/NotSame() 判斷兩個對象是否指向同一個對象
fail() 失敗
failNotSame/failNotEquals 當不指向同一個內存地址或者不相等的時候,輸出錯誤信息

三.編寫測試用例的流程:

(1)建立繼承自TestCase類的測試類

(2)編寫測試方法通常都是固定模式public void testXXXX();

(3)建立testSuit並將(1)中編寫的TestCase添加到testsuit;

(4)運行TestRunner對TestSuit進行測試。

這裏要介紹兩個有用的方法:

setup()/tearDown()

setup:在每次執行測試方法以前,該方法都會被執行,一般在這裏進行一些固定的工做

tearDown():每次測試方法執行結束的時候,這個方法都會被執行一次,一般在這裏執行一些收尾工做。

四.Junit3 與Junit4的區別,及Junit4新特性

Junit 3 Junit 4
必須引入junit.framework.TestCase

必須引入

import static org.junit.Assert.*;

import org.junit.Test;

必須繼承TestCase 不需繼承TestCase
測試方法必須使用test開頭 不須要可是必須加上@test註釋,可是返回值必須是void類型,而且不能帶參數。
還可使用@Test(timeout=100)給測試函數設定一個執行時間,超過了這個時間,它們就會被系統強行終止,而且系統還會彙報該函數結束的緣由是由於超時。
使用@Test(excepted=IllegalArgumentException.class)測試指望的異常,若是沒有發現異常或者拋出的異常不是指望的就測試失敗。
   
setUp名字不能變(覆蓋父類的方法) 使用@Before,方法名稱隨意
tearDown名稱不能變 使用@After:方法名可變

Junit新增長特性:

@BeforeClass
    public static void setUpBeforeClass() throws Exception {
        System.out.println("BeforeClass");
    }

//在全部測試方法包括Before以前執行,只執行一次

@AfterClass
    public static void tearDownAfterClass() throws Exception {
        System.out.println("tearDownAfterClass");
    }

//在全部測試方法包括After以後執行,只執行一次

綜上所述Junit4的單元測試用例執行順序爲

@BeforeClass->@Before->@Test方法1->@After->@Before->@Test方法2->@After—>@AfterClass

Junit4沒有設置Test Suit,它使用@RunWith以及@SuitClasses來替代。

以下所示:

package com.example.ForTestClass.junit;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

JUnit 中全部的測試方法都是由運行器負責執行的。 JUnit 爲單元測試
提供了默認的測試運行器,但 JUnit並不必定須要使用 默認的運行器。咱們不只能夠經過繼承org.junit.runner.Runner定製本身
運行器而且還能夠爲每個測試類指定使用某個具體的運行器。制定方法以下:

@RunWith(Suite.class)//提示Junit將此類做爲指定運行器

在實際項目中每每單元測試類會不少, JUnit 提供了一種批量運行測試
類的方法,叫作測試套件。也就是上面所說的Test Suit。這樣每次須要驗證系統功能正確性時,只執行一個或幾個測試套件即可以了。
@SuiteClasses({ ClassForTestTest.class, ClassForTestTests.class })添加測試類

public class AllTests {

}

@Ignore用於暫時忽略某個測試方法,由於有時候因爲測試環境受限,並不能
保證每個測試方法都能正確運行。

@Ignore("Multiply() Not yet implemented")
    @Test
    public final void test() {
    }

參數化測試:

在測試的時候會遇到一種狀況就是須要模擬不一樣的參數對方法進行測試,可是爲不一樣的參數建立一個測試方法是不大現實的,這時候可使用參數化測試機制來解決這個問題。

以下例子所示

@RunWith(Parameterized.class) public class CalculateTest2 {
    Calculate calculate;
    private int input1;
    private int input2;
    private int expected;
    @Parameters
    public static Collection prepareData() {
        Object[][] object = { { -1, -2, -3 }, { 0, 2, 2 }, { -1, 1, 0 },
                { 1, 2, 3 } };
        return Arrays.asList(object);
    }

    public CalculateTest2(int input1, int input2, int expected) {
        this.input1 = input1;
        this.input2 = input2;
        this.expected = expected;
    }

    @Before
    public void setUp() throws Exception {
        calculate = new Calculate();
    }

    @Test
    public void testAdd() {
        int result = calculate.add(input1, input2);
        assertEquals(expected, result);
    }
}
五.Eclipse下使用Junit4

下面就以eclipse下的Junit 4爲例說明如何使用Junit進行測試:

建立一個項目,編寫待測試的類ClassForTest以下圖所示:

tmp575

ClassForTest.java的源碼以下所示:

package com.example.ForTestClass;

public class ClassForTest {
    public int add(int a,int b){
        return a+b;
    }
    public double divide(int a,int b){
        return a/b;
    }
}

選中ClassForTest.java右擊New –>Others出現下面的對話框選中Junit Test Cass

tmp576

tmp577

出現上面的界面後點擊next,

選中待測試的方法:

tmp578

點擊Next,提示是否將Junit添加到編譯路徑?點擊OK。它將自動產生以下代碼:

tmp579

選中ClassForTestTest.java右擊選中new—>Junit Test Suit出現以下界面:

tmp57A

點擊next選中要添加到TestSuit中的類:

tmp57B

點擊finish

選中剛剛建立的Test Suit右擊run As Junit Test 查看結果:

tmp57C

 

六.一些編寫規範

(1)測試代碼應單獨位於一個Source Folder下通常命名爲test,而且在該Source Folder下所處的包名最好與待測試類同名。

(2)測試方法名格式test+待測試方法名+簡要描述(可選)

(3)測試類名格式待測試類名+Test

(4)多使用一些帶消息的標籤,這樣能夠定位出錯誤的緣由

assertEquals("ClassForTestTestss測試出錯"+result+":"+expect, result, expect);

七.推薦材料:

Junit4 文檔

http://tool.oschina.net/apidocs/apidoc?api=junit-4.10

Open文檔網站下的資源:

http://www.open-open.com/doc/list/194

相關文章
相關標籤/搜索