Parameterized tests

Parameterized继承自Suite。Parameterized是在参数上实现了Suite,修饰一个测试类,然后提供多组构造函数的参数用于测试不同场景。

import java.util.Arrays; 
import java.util.Collection; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.Parameterized.Parameters; 
import org.junit.runners.Parameterized; 

@RunWith(Parameterized.class) 
public class ParameterizedTest { 
@Parameters 
public static Collection<Object[]> data(){ 
return Arrays.asList(new Object[][]{ 
{0,"Zero"},{1,"One"},{2,"Two"},{3,"Three"},{4,"Four"},{5,"Five"},{6,"Six"} 
}); 
} 

private int fInput; 
private String fExpected; 

public ParameterizedTest(int input,String expected){ 
super(); 
fInput=input; 
fExpected=expected; 
} 

@Test 
public void test(){ 
System.out.println(fInput+":"+fExpected); 
} 
} 


测试结果:

0:Zero
1:One
2:Two
3:Three
4:Four
5:Five
6:Six

我们首先需要用@RunWith(Parameterized.class)来修饰我们的测试类;然后建立一个带有参数的构造器,由于每次运行测试方法的时候都会调用构造器,所以会根据相应的参数来创建一个测试实例;最后需要用@Parameters修饰我们提供参数的静态方法,该静态方法需要返回List<Object[]>,List包含的是参数组,Object[]即按顺序提供的一组参数。

另外一种使用参数的方法是通过 @Parameter 直接将数据注入属性。但是该属性必须是public。

import java.util.Arrays; 
import java.util.Collection; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.Parameterized.Parameter; 
import org.junit.runners.Parameterized.Parameters; 
import org.junit.runners.Parameterized; 

@RunWith(Parameterized.class) 
public class ParameterizedTest02 { 
@Parameters 
public static Collection<Object[]> data(){ 
return Arrays.asList(new Object[][]{ 
{0,"Zero"},{1,"One"},{2,"Two"},{3,"Three"},{4,"Four"},{5,"Five"},{6,"Six"} 
}); 
} 

@Parameter(value=1) 
public String fInput; 
@Parameter(value=0) 
public int fExpected; 

@Test 
public void test(){ 
System.out.println(fInput+":"+fExpected); 
} 
} 

测试结果:

Zero:0
One:1
Two:2
Three:3
Four:4
Five:5
Six:6
对于上面的7组测试结果数据,在JUnit中显示为:

//img-blog.csdn.net/20150202215607177

我们可以通过为 @Parameters加一个格式化 name 值来为每一组测试提供一个个性化的名字。name值允许包含占位符:

  • {index}:当前参数索引
  • {0},{1},...:第一(二,三等等)个参数值 

如果把上面例子的@Parameters 改为 @Parameters(name="{index}:English({0})={1}]") ,则在JUnit中显示为:

//img-blog.csdn.net/20150202215607177

posted @ 2015-07-11 13:44  微微微笑  阅读(949)  评论(0编辑  收藏  举报