1. 程式人生 > >引數化測試(Parameterized Test)

引數化測試(Parameterized Test)

Junit 4 引數化測試 允許通過變化範圍的引數值來測試方法。引數擦測試可以通過以下簡單的步驟實現:

  1. 對測試類添加註解 @RunWith(Parameterized.class)。
  2. 將需要使用變化範圍引數值測試的引數定義為私有變數。
  3. 使用上一步驟宣告的私有變數作為入參,建立建構函式。
  4. .建立一個使用@Parameters註解的公共靜態方法,它將需要測試的各種變數值通過集合的形式返回。
  5. 使用定義的私有變數定義測試方法。

Junit 4 引數化測試樣例

EvenNumberChecker.java 校驗輸入的數字是否為偶數:

package in.co.javatutorials;
 
/**
 * @author javatutorials.co.in
 */
public class EvenNumberChecker {
 
    /**
     * Is input number even.
     *
     * @param i input number
     * @return true if input is even number; otherwise return false
     */
    public boolean isEven(int i) {
        if (i % 2 == 0) {
            return true;
        } else {
            return false;
        }
    }
}

EvenNumberCheckerTest.java 對 EvenNumberChecker.java 進行引數化測試:

package in.co.javatutorials;
 
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;
 
/**
 * @author javatutorials.co.in
 */

// Step 1
@RunWith(Parameterized.class)
public class EvenNumberCheckerTest {
 
    // Step 2: variables to be used in test method of Step 5
    private int inputNumber;
    private boolean isEven;
 
    // Step 3: parameterized constructor
    public EvenNumberCheckerTest(int inputNumber, boolean isEven) {
        super();
        this.inputNumber = inputNumber;
        this.isEven = isEven;
    }
 
    // Step 4: data set of variable values
    @Parameters
    public static Collection<Object[]> data() {
        Object[][] data = new Object[][] {
                { 2, true },
                { 5, false },
                { 10, false }
        };
        return Arrays.asList(data);
    }
 
    @Test
    public void test() {
        System.out.println("inputNumber: " + inputNumber + "; isEven: " + isEven);
        EvenNumberChecker evenNumberChecker = new EvenNumberChecker();
        // Step 5: use variables in test code
        boolean actualResult = evenNumberChecker.isEven(inputNumber);
        assertEquals(isEven, actualResult);
    }
}

樣例輸出

  在Eclipse junit 視窗的輸出為:

       

樣例日誌輸出

inputNumber: 2; isEven: true
inputNumber: 5; isEven: false
inputNumber: 10; isEven: false

本文出處為 http://blog.csdn.net/luanlouis,轉載請註明出處,謝謝!