TestNG 提供的重要功能是 testng DataProvider
功能。 它可以帮助您编写数据驱动的测试,这实际上意味着同一测试方法可以使用不同的数据集多次运行。
请注意,除了从testng.xml
传递参数之外,@DataProvider
是向测试方法传递参数的第二种方法。 它有助于为测试方法提供复杂的参数,因为不可能从 XML 做到这一点。
要在测试中使用DataProvider
功能,您必须声明一个由@DataProvider
注解的方法,然后在测试方法中使用该方法,并在测试方法中使用@Test
注解。
1. TestNG 同一类中的@DataProvider
和@Test
下面的测试类包含一个测试方法,该方法采用一个参数作为输入,并在执行时将其打印到控制台。 通过使用 TestNG 的@DataProvider
注解,在同一类中也可以使用DataProvider
方法。
使用@DataProvider
注解的name
属性提及所述DataProvider
方法的名称。 DataProvider
返回一个具有两个数据集的Object
类双数组,即“数据一”和“数据二”。
package com.howtodoinjava.test;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class SameClassDataProvider
{
@DataProvider(name = "data-provider")
public Object[][] dataProviderMethod() {
return new Object[][] { { "data one" }, { "data two" } };
}
@Test(dataProvider = "data-provider")
public void testMethod(String data) {
System.out.println("Data is: " + data);
}
}
现在运行以上测试。 以上测试运行的输出如下:
Data is: data one
Data is: data two
PASSED: testMethod("data one")
PASSED: testMethod("data two")
从上面的测试结果可以看出,该类中的相应测试方法已执行了两次。 测试方法的执行取决于DataProvider
方法传递的数据集的数量,在这种情况下,由于DataProvider
返回了两组不同的数据,因此测试方法执行了两次。
@DataProvider
方法必须以Object
类的双数组(Object[][]
)形式返回数据。 第一个数组代表一个数据集,其中第二个数组包含参数值。
2. TestNG 不同类中的@DataProvider
和@Test
要了解这一点,请添加两个名称分别为DataProviderClass
和TestClass
的类,如下所示。
2.1. DataProvider.java
import org.testng.annotations.DataProvider;
public class DataProviderClass
{
@DataProvider(name = "data-provider")
public static Object[][] dataProviderMethod()
{
return new Object[][] { { "data one" }, { "data two" } };
}
}
2.2. TestClass.java
import org.testng.annotations.Test;
public class TestClass
{
@Test(dataProvider = "data-provider", dataProviderClass = DataProviderClass.class)
public void testMethod(String data)
{
System.out.println("Data is: " + data);
}
}
2.3 演示
现在运行以上测试。 以上测试运行的输出如下:
Data is: data one
Data is: data two
PASSED: testMethod("data one")
PASSED: testMethod("data two")
从上面的测试结果中可以看到,根据DataProvider
方法传递给它的数据,该测试方法已执行两次。 在这种情况下,DataProvider
方法位于另一个类中。 在这种情况下,必须将dataProviderMethod()
声明为静态,以便测试方法可以使用另一类中的dataProviderMethod()
来提供数据。
学习愉快!