爲保證單元測試的嚴謹性,咱們模擬了不一樣的狀況來測試方法,爲此寫了大量的單元測試方法。可是這些方法都差很少只是參數和指望值不一樣,如今使用Junit的參數化測試能很好的應對這個問題java
參數化測試的編寫稍微有點麻煩函數
1. 爲準備使用參數化測試的測試類指定特殊的運行器org.junit.runners.Parameterized。
2. 爲測試類聲明幾個變量,分別用於存放指望值和測試所用數據。
3. 爲測試類提供參數的方法聲明一個使用註解org.junit.runners.Parameterized.Parameters 修飾的,返回值爲java.util.Collection 的公共靜態方法,並在此方法中初始化全部須要測試的參數對。
4. 爲測試類聲明一個帶有參數的公共構造函數,並在其中爲第二個環節中聲明的幾個變量賦值。
5. 編寫測試方法,使用定義的變量做爲參數進行測試。單元測試
package com.tiamaes.junit; import static org.junit.Assert.assertEquals; 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; @RunWith(Parameterized.class) public class TestWordDealUtilWithParam { private String expected; private String target; @SuppressWarnings("rawtypes") @Parameters public static Collection words(){ return Arrays.asList(new Object[][]{ {"EMPLOYEE_INFO","employeeInfo"}, //正常狀況 {null,null}, //參數爲null {"",""}, //空字符串 {"EMPLOYEE_INFO","EmployeeInfo"}, //首字母大寫 {"EMPLOYEE_INFO_A","EmployeeInfoA"},//尾字母大寫 {"EMPLOYEE_A_INFO","EmployeeAInfo"} //多個大寫字母相連 }); } public TestWordDealUtilWithParam(String expected,String target){ this.expected = expected; this.target = target; } @Test public void testWordFomat4DB() { assertEquals(this.expected, WordDealUtil.wordFomat4DB(this.target)); } }