位置:首頁 > Java技術 > JUnit教學 > 創建參數化測試

創建參數化測試

在本節中,我們將學習如何創建參數測試。為此,我們將使用前麵章節中提供的一個公共方法添加整數。因此,這是要進行的測試類。

但是,一個測試類也可以被看作是一個參數化測試類?當然,但它要滿足下列所有要求:

  • 該類被注解為 @RunWith(Parameterized.class).
    如前一節中所說明的, @RunWith 注解讓JUnit來調用其中的注釋來運行測試類,代替使用內置的JUnit運行器,Parameterized 是一個在JUnit內的運行器將運行相同的測試用例組在不同的輸入。
  • 這個類有一個構造函數,存儲測試數據。
  • 這個類有一個靜態方法生成並返回測試數據,並注明@Parameters注解。
  • 這個類有一個測試,它需要注解@Test到方法。

現在,我們將創建一個名為 CalculateTest.java 的一個新的測試類, 遵循上述指導原則。這個類的源代碼如下。

CalculateTest.java

package com.yiibai.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 CalculateTest {

	private int expected;
	private int first;
	private int second;

	public CalculateTest(int expectedResult, int firstNumber, int secondNumber) {
		this.expected = expectedResult;
		this.first = firstNumber;
		this.second = secondNumber;
	}

	@Parameters
	public static Collection addedNumbers() {
		return Arrays.asList(new Integer[][] { { 3, 1, 2 }, { 5, 2, 3 },
				{ 7, 3, 4 }, { 9, 4, 5 }, });
	}

	@Test
	public void sum() {
		Calculate add = new Calculate();
		System.out.println("Addition with parameters : " + first + " and "
				+ second);
		assertEquals(expected, add.sum(first, second));
	}
}

正如我們觀察上麵的類,它滿足上述所有要求。addedNumbers方法使用注釋@Parameters返回數組的集合。每個數組包括每個測試執行輸入/輸出數字。每個數組中的元素數必須相同以在構造參數的數目。所以,在這種特定的情況下,每個數組包括三個元素,即表示要加入的數字兩個元素和一個元素結果。

如果我們運行 CalculateTest 測試用例,控製台輸出如下:

Addition with parameters : 1 and 2
Adding values: 1 + 2
Addition with parameters : 2 and 3
Adding values: 2 + 3
Addition with parameters : 3 and 4
Adding values: 3 + 4
Addition with parameters : 4 and 5
Adding values: 4 + 5

正如我們在輸出中看到,測試用例被執行4次,這是在方法的輸入注解為@Parameters的數量。