参数化测试

JUnit4.X 的参数化测试 为保证单元测试的严谨性,通常会模拟不同的测试数据来测试方法的处理能力 为此我们需要编写大量的单元测试的方法,可是这些测试方法都是大同小异的 它们的代码结构都是相同的,不同的仅仅是测试数据和期望值 这时可以使用 JUnit4 的参数化测试,提取测试方法中相同代码 ,提高代码重用度 参数化测试的要点 

① 准备使用参数化测试的测试类必须由 org.junit.runners.Parameterized 运行器修饰 

② 准备数据。数据的准备需要在一个方法中进行,该方法需要满足的要求如下 

             1) 该方法必须由 org.junit.runners.Parameterized.Parameters 注解 修饰           

             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<Object[]> 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);
	}

}

猜你喜欢

转载自blog.csdn.net/qq_36793010/article/details/79984643