博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TestNG中的@Factory与@DataProvider的执行比较
阅读量:4180 次
发布时间:2019-05-26

本文共 1671 字,大约阅读时间需要 5 分钟。

TestNG中@Factory与@DataProvider的功能大相径庭,但是在多次执行的问题上常常理不清。

1.@DataProvider

首先,必须明确,使用@DataProvider修饰的方法,只负责提供测试数据,而且是测试执行前就确定了的静态数据。该方法必须被其他测试方法引用才意义。

其次,必须强调,使用@DataProvider修饰的方法,其返回的数据类型必须为Object[][]。为什么必须是二维数组呢?其中的一维表示单位测试数据,而另一维表示可以提供多组独立的测试数据,供逐一使用。

@DataProviderpublic Object[][] dataMethod() {    return new Object[][] { { "one" }, { "two" } };}

所以,当@DataProvider修饰的方法提供了多组测试数据时,引用@DataProvider的测试方法,就会被多次执行,每次执行使用@DataProvider的一组测试数据。即@DataProvider修饰的方法中有多少组测试数据,引用@DataProvider的测试方法就会被执行多少次。但是自始至终只有一个测试类的实例,即该实例的一个测试方法被多次执行。

@Test(dataProvider = "dataMethod")public void testMethod(String param) {    System.out.println("The parameter value is: " + param);}

2. @Factory

首先,使用@Factory修饰的方法,负责提供测试类的实例。只是测试类的构造函数带了参数,为了构造不同的测试类实例,每次都要给测试类的构造函数传递不同的测试参数,从而构造不同的测试类的实例。@Factory修饰的方法永远返回Object[]类型。

其次,测试类中无需显式引用@Factory修饰的方法,因为该方法就提供测试类的实例,不需要调用。执行测试时,先构造一个测试类的实例,再执行该测试类中的所有测试方法。然后再构造一个新的测试类的实例,并执行其所有测试方法,直到所有的测试类的实例都被构造执行。即@Factory修饰的方法中有多少个测试类的实例,就会执行多少遍该测试类中的所有测试方法。

@Factorypublic Object[] factoryMethod() {    return new Object[] {        new SimpleTest("one"),        new SimpleTest("two")    };}

3. 在@Factory方法中引用@DataProvider方法

既然@Factory修饰的方法,也需要测试数据用以构造测试类的实例,那么该方法还可以引用@DataProvider修饰的方法,以构造不同的测试类的实例。

@Factory(dataProvider = "dataMethod")public Object[] factoryMethod(String param) {    return new Object[] {        new SimpleTest(param)    };}

4. 不同测试类的实例

此外,@Factory修饰的方法不仅仅能够构造一个测试类的不同实例,还能够构造不同测试类的实例。

@Factory(dataProvider = "dataMethod")public Object[] factoryMethod(String param) {    return new Object[] {        new SimpleTest(param),         new ComplicateTest(param)    };}

使用上述@dataProvider作为参数数据,将分别构造两个SimpleTest测试类实例,和ComplicateTest两个测试类实例。

 

转载地址:http://oqlai.baihongyu.com/

你可能感兴趣的文章
查找出一个字符串不重复字符的最大长度
查看>>
2的次幂
查看>>
3的次幂
查看>>
求一个数的平方根
查看>>
mysql查看死锁和解锁
查看>>
对synchronized的使用一点浅解
查看>>
Intellij IDEA 自定义 LIVE TEMPLATES
查看>>
Gennerate Unique 10 digit ID
查看>>
ConcurrentHashSet的使用
查看>>
Java复制文件的4种方式
查看>>
datatables对某列进行求和
查看>>
记录切换openjdk遇到的一个坑
查看>>
Lombok---@EqualsAndHashCode(callSuper = true)的使用
查看>>
Java实体映射工具 MapStruct的简单应用
查看>>
IDEA中的Git操作
查看>>
sharding-jdbc配置主从数据库
查看>>
请求https跳过证书认证
查看>>
JDBC多线程插入大量数据.md
查看>>
MYSQL查看数据库相关信息
查看>>
JAVA多线程插入MYSQL数据库
查看>>