JUnit

JUnit是用于編寫可重復(fù)測試的單元測試框架,可實現(xiàn)自動化測試。
JUnit官方API文檔:http://junit.org/junit4/javadoc/latest/index.html

創(chuàng)建測試類

以下內(nèi)容使用Eclipse

添加JUnit library

Build Path - Add Libraries - JUnit

新建測試類

右鍵待測試類 - New - Other (Ctrl + N) - JUnit Test Case - Next - Select methods - Finished

命名規(guī)范

被測試類名為MyClass,位于默認(rèn)source folder中的包com.mydemo.util。

package com.mydemo.util;
public class MyClass {
    public static int add(int a, int b) {
        return a + b;
    }
}

新建source folder (可命名為test) 存放測試代碼,在該folder下創(chuàng)建與被測試類同名包。測試類命名為MyClassTest,方法命名為testMethodName。測試方法前需加@Test,測試方法不能帶參數(shù),且必須為public void。

package com.mydemo.util;
import static org.junit.Assert.*;
import org.junit.Test;
import com.mydemo.util.MyClass;
public class MyClassTest {
    @Test
    public void testAdd() {
        assertEquals(6, MyClass.add(3, 3));
    }
}

使用測試類

運行測試類

測試失敗

測試失敗包括failure和error兩種情況:

  • Failure是斷言內(nèi)容不匹配,如
    assertEquals(5, MyClass.add(3, 3));
  • Error是程序存在Error或未處理的Exception,如
    assertEquals(6, MyClass.add(3, a));
    assertEquals(6, MyClass.divide(3, 0));

失敗時,JUnit測試工具顯示紅色條,F(xiàn)ailure Trace顯示原因和位置。

注解Annotation

@Test

將普通方法注釋為測試方法,方法內(nèi)部使用斷言,斷言失敗時測試失敗。

  • @Test(expected = ExceptionName.class)
    表示預(yù)期會拋出的異常,如拋出聲明類型的異常測試仍然顯示成功。
  • @Test(timeout = milliseconds)
    表示超出時間測試程序自動結(jié)束并顯示為失敗,時間單位為毫秒。

@BeforeClass, @AfterClass, @Before, @After

  • @BeforeClass
    該方法在所有的方法運行前被執(zhí)行,必須為static。當(dāng)測試類被加載后接著就會被運行,且在內(nèi)存中只會存在一份實例??捎糜诩虞d配置文件。
  • @AfterClass
    該方法在所有的方法運行結(jié)束后被執(zhí)行,必須為static。通常用來對資源的清理,如關(guān)閉數(shù)據(jù)庫的連接。
  • @Before, @After
    分別在每一個測試方法運行前、后被執(zhí)行一次??捎糜诔跏蓟兞炕蛑刂米兞康?。

@Ignore

被注釋的測試方法會被測試運行器忽略,測試時不執(zhí)行。

@RunWith

可以更改測試運行器,運行器需繼承org.junit.runner.Runner。

測試套件

可用于多個測試類的同時測試。測試套件基本結(jié)構(gòu)如下:

package com.mydemo.util;

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

@RunWith(Suite.class)
@Suite.SuiteClasses({Test1.class,Test2.class,Test3.class, Suite1.class})
public class SuiteTest {
}
  • 創(chuàng)建測試套件類SuiteTest.class,作為測試套件的入口類,這個類不包含任何方法。
  • @RunWith(Suite.class) 更改測試運行器,避免使用JUnit默認(rèn)測試運行器。
  • @Suite.SuiteClasses({}) 添加測試類到測試套件中,參數(shù)為數(shù)組形式的測試類或測試套件類。

參數(shù)化測試

package com.mydemo.util;

import static org.junit.Assert.*;

import java.util.Arrays;
import java.util.Collection;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

// 更改默認(rèn)測試運行器
@RunWith(Parameterized.class)
public class ParameterTest {
    // 聲明變量存放預(yù)期值和測試數(shù)據(jù)
    int expected =0;
    int input1 = 0;
    int input2 = 0;
    // public構(gòu)造函數(shù)給預(yù)期值和測試數(shù)據(jù)賦值
    public ParameterTest(int expected,int input1,int input2) {
        this.expected = expected;
        this.input1 = input1;
        this.input2 = input2;
    }
    // 返回值為Collection的public static方法,返回測試數(shù)據(jù)集合,用@Parameters修飾
    @Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][]{
                {3,1,2},
                {4,2,2}
        }) ;
    }
    @Test
    public void testAdd() {
        assertEquals(expected, MyClass.add(input1, input2));
    }
}

參考資料

http://junit.org/junit4/
http://www.imooc.com/learn/356

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容