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中显示为:
我们可以通过为 @Parameters加一个格式化 name 值来为每一组测试提供一个个性化的名字。name值允许包含占位符:
- {index}:当前参数索引
- {0},{1},...:第一(二,三等等)个参数值
如果把上面例子的@Parameters 改为 @Parameters(name="{index}:English({0})={1}]") ,则在JUnit中显示为:
作者:微微微笑
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.