JUnit自動化單元測試(五):引數化測試
阿新 • • 發佈:2019-01-02
要成為JUnit測試高手必不可少的一項技能就是引數化測試了,現在有一個方法根據不同的引數會有不同的結果,為了測試全面如果把所有可能的情況都逐個寫出來測試一遍那未免太low了,此時就可以用引數化測試,舉個例子:
package junit.demo;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class) //宣告引數執行器
public class ParametersTest {
private int first;
private int second;
/* 建構函式需要的引數會自動從引數列表中依次取出 */
public ParametersTest(int first, int second) {
this.first = first;
this.second = second;
}
/* 這裡就是引數化測試的關鍵了
* 通過@Parameters修飾表示該方法是為這次測試提供引數的,預設是建構函式的引數,以集合的形式傳入。
* name屬性則是一個名字,稍後解釋。
* 當然最簡單的方法就像這樣寫就行了 */
@Parameters(name = "{index}: parm({0},{1})")
public static List<Object[]> data() {
return Arrays.asList(new Object[][] { { 2, 6 }, { 0, 100 }, { -3, 9 } });
}
@Test
public void test() {
assertEquals(second, doSome(first));
}
/* 假如這個就是我們要測試的方法:
* 如果引數大於零,則返回引數*3;
* 如果引數等於零,則返回100;
* 如果引數小於零,則返回引數*-3 */
private Object doSome(int first) {
if (first > 0) {return first * 3;}
if (first == 0) {return 100;}
if (first < 0) {return first * -3;}
return null;
}
}
OK,這樣測試一下會發現三個測試成功結果
沒錯,Parameterized.class引數執行器相當於把引數列表裡面的資料一次取一組進行測試,通過建構函式例項化將引數放進測試中,我的demo裡有三組資料,因此會有三個測試結果。
同時細心的朋友會發現,每個測試結果的顯示名字… 沒錯,就是程式碼裡面提到的引數配置name屬性:”{index}”表示集合下標,“{0}”表示第一個引數值,“{1}”表示第二個引數值。很好理解吧。
至此,整個JUnit已經講解了十分之八,最重要還是在實際運用過程中根據據需要進行單元測試,可能在實際開發中很少有公司會正規的進行單元測試,不過身為一個開發者,沒有任何的藉口阻擋我們不斷學習進取的腳步。