Junit 参数化测试

作者:範宗雲 来源:原创 发布时间:2015-04-12 归档:junit

环境 : JDK 7 Maven 3 Junit 4.11 Eclipse Luna
		    public class Calculator {
			
				public int add(int x, int y) {
					return x + y;
				}
				
			}
		    
		    @RunWith(Parameterized.class)
			public class CalculatorTest {
			
				private int x;
				private int y;
				private int z;
				
				public CalculatorTest(int x, int y, int z) {
					this.x = x;
					this.y = y;
					this.z = z;
				}
				
				@Parameters
				public static Collection<Object[]> dataStore() {
					return Arrays.asList(new Object[][]{
						{1, 2, 3},
						{2, 3, 5},
						{3, 4, 7},
						{4, 5, 9}
					});
				}
				
				@Test
				public void testAdd() {
					Calculator calculator = new Calculator();
					assertEquals(z, calculator.add(x, y));
				}
			
			}
		    
测试类需要使用 @RunWith(Parameterized.class) 标注, 表明这是一个 Parameterized test。
由 @Parameters 注解标注的 public static Collection<Object[]> 方法提供一组测试数据, 测试用例执行时, 通过有参的构造方法将测试数据依次入参, 如第一组 {1, 2, 3}, 则构造器参数 x=1, y=2, z=3。最后执行测试方法。
assertEquals(z, calculator.add(x, y)) 即 x + y 是否等于 z, 若等于则成功, 否则失败。
mvn clean test 执行结果 :
Running org.lychie.service.CalculatorTest
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.137 sec

示例代码下载
junit-parameterized.zip