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;


/**
 * 参数化测试运行器 
 * 使用不同参数多次运行同一测试
 * 
 * 运行这个测试,会根据@Parameters方法返回的Collection的大小进行循环。
 * 执行这个单独的测试用例效果等同于执行以下不同参数的测试用例:
 * sum: assertEquals(2, calculator.add(1,1),0);
 * sum: assertEquals(3, calculator.add(2,1),0);
 * sum: assertEquals(4, calculator.add(3,1),0);
 * 
 * 
 * JUnit运行过程:
 * 1.JUnit调用静态方法getTestParameters();
 * 2.对getTestParameters()集合中每个数据进行循环。
 * 3.调用构造方法(如果存在多个构造方法,JUnit会抛出异常)
 * java.lang.IllegalArgumentException: Test class can only have one constructor
 * 4.JUnit会使用数组元素来构成参数调用构造方法。
 * 5.调用@Test方法。
 * 6.继续为集合中下一个数组重复以上过程。
 * 
 * @author fanxl-4827
 *
 */




/**
 * 要使用Parameterized的测试运行器来运行测试类,测试类必须使用@RunWich注释
 * 并将Parameterized类作为测试类的参数
 */
@RunWith(value = Parameterized.class)
public class ParameterizedTest {


/*
* 声明测试中使用的实例变量
*/
private double expected;
private double num1;
private double num2;


/**
* 为测试提供输入值和期望的输出值
* @return Collection
*/
//该方法需要@Parameters注释,用于获取测试参数
@Parameters
public static Collection getTestParameters(){
//返回值类型必须是Collection
return Arrays.asList(new Integer[] [] {
/*
* 数组元素必须是相同长度的数组,并且数组长度和构造方法参数数量一致


* 实例中数组中包含3个元素,和构造方法参数数量一致
* 此处我们要测试Calculator类的add方法,所以提供了三个参数:
* expected值和两个待求和的值
*/
{2,1,1},
{3,2,1},
{4,3,1},
});
}

public ParameterizedTest(double expected, double num1, double num2) {
this.expected = expected;
this.num1 = num1;
this.num2 = num2;
}

public ParameterizedTest( double num1, double num2) {
this.num1 = num1;
this.num2 = num2;
}

@Test
public void sum() {
Calculator calc = new Calculator();
assertEquals(expected, calc.add(num1, num2), 0);
}

}



public class Calculator {


public double add(double number1, double number2) {
return number1 + number2;
}


}

你可能感兴趣的:(JUnit)