パラメトリックテスト


JUnit4.Xのパラメトリックテストはユニットテストの厳格性を保証するため、通常は異なるテストデータをシミュレートして方法の処理能力をテストする.そのため、私たちは大量のユニットテストの方法を書く必要があるが、これらのテスト方法はすべて大同小異であり、それらのコード構造はすべて同じであり、異なるのはテストデータと期待値だけである.この場合、JUnit 4のパラメトリックテストを使用して、テスト方法の同じコードを抽出することができる.コード再利用度を向上させるパラメータ化テストのポイント
①パラメトリックテストを使用する準備をするテストクラスはorg.junit.runners.Parameterizedランナ修飾
②データを準備する.データの準備は1つの方法で行う必要があり、この方法が満たす必要がある要求は以下の通りである.
1)この方法はorg.junit.runners.Parameterized.パラメータ注記修飾
2)このメソッドは、返される値がjavaである必要がある.util.Collectionタイプのpublic staticメソッド
3)このメソッドにはパラメータがなく,メソッド名は任意である.このメソッドはクラスのインスタンス化前に実行されます
③試験クラスに対していくつかの変数を宣言し、それぞれ期待値と試験に用いるデータを格納する
④テストクラスにパラメータ付きの共通構造関数を宣言し、③で宣言した変数に値を付与する
⑤試験方法を作成し、定義した変数をパラメータとして試験する
Junit 4パラメトリックテストでは、範囲のパラメータ値を変化させることでメソッドをテストできます.パラメータ消去テストは、次の簡単な手順で実行できます.
 
1.テストクラスに注記@RunWith(Parameterized.class)を追加
2.変動範囲パラメータ値を使用してテストする必要があるパラメータをプライベート変数として定義
3.前のステップで宣言したプライベート変数をパラメータとして使用して、コンストラクション関数を作成
4. .@Parameters注記を使用した共通の静的メソッドを作成します.このメソッドでは、テストする必要がある様々な変数値がセットで返されます. 5. 定義されたプライベート変数を使用したテスト方法の定義
例:
/***数学計算-->加算*/
Addクラス:
public class Add {
	public int add(int a, int b) {
		return a + b;
	} 
}

AddTestクラス:
import static org.junit.Assert.*;
import java.util.Collection;
import java.util.Arrays;

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

//Step 1:  @RunWith(Parameterized.class)
@RunWith(Parameterized.class)
public class AddTest {

	//Step 2: 
	private int inputNumberA;
	private int inputNumberB;
	private int except;
	
	//Step 3: , 
	public AddTest(int inputNumberA,int inputNumberB,int except) {
		super();
		this.inputNumberA=inputNumberA;
		this.inputNumberB=inputNumberB;
		this.except=except;
	}
	
	//Step 4: @Parameters  , 。
	@Parameters
	public static Collection data(){
		Object[][] data = new Object[][] {
			{2,2,4},
			{-1,-2,-3},
			{2,5,5}
		};
		return Arrays.asList(data);
	}
	
	
	@Test
	public void test() {
//		fail("Not yet implemented");
		System.out.println(inputNumberA+"+"+inputNumberB+"="+except);
		Add add = new Add();
		int result = add.add(inputNumberA, inputNumberB);
		Assert.assertEquals(except,result);
	}

}