因此,如果想要使用不同的测试数据执行一个测试用例多次,那么采用DataProvider;如果想要多次执行一个测试类的所有用例,那么采用Factory。
当然,Factory与DataProvider也可结合在一起使用,请看下面例子:
在测试类Test1中有2个用例,其中用例test2通过dataProvider提供参数,而在DataProvider中提供了3组参数,因此测试类Test1每次会执行4个用例;
在工厂类FactoryWithDataprovider中,通过DataProvider为工厂方法提供参数,因此工厂方法会创建2个Test1的实例。
1 public class Test1 { 2 private String name; 3 public Test1(String name) { 4 this.name = name; 5 } 6 7 @Test 8 public void test1() { 9 System.out.println("test1: His name is " + name); 10 } 11 12 @Test(dataProvider = "data1") 13 public void test2(String hobby) { 14 System.out.println("test2: " + name + " likes " + hobby); 15 } 16 17 @DataProvider(name = "data1") 18 public Object[][] createdata() { 19 return new Object[][] { 20 {"baozoumanhua"}, 21 {"movie"}, 22 {"music"} 23 }; 24 } 25 } 26 27 public class FactoryWithDataprovider { 28 29 @DataProvider(name = "data2") 30 public Object[][] createdata() { 31 return new Object[][] { 32 {"wangnima"}, 33 {"wangnimei"}, 34 }; 35 } 36 37 @Factory(dataProvider = "data2") 38 public Object[] createInstace(String name) { 39 return new Object[] { 40 new Test1(name) 41 }; 42 } 43 } |
执行结果如下:2个实例,每个实例执行4个用例,总共8个用例。
test1: His name is wangnima test1: His name is wangnimei test2: wangnima likes baozoumanhua test2: wangnima likes movie test2: wangnima likes music test2: wangnimei likes baozoumanhua test2: wangnimei likes movie test2: wangnimei likes music PASSED: test1 PASSED: test1 PASSED: test2("baozoumanhua") PASSED: test2("movie") PASSED: test2("music") PASSED: test2("baozoumanhua") PASSED: test2("movie") PASSED: test2("music") |