当你需要通过复杂的参数或参数需要创建从Java(复杂的对象,对象读取属性文件或数据库等..),在这种情况下,可以将参数传递使用数据提供者。数据提供者 @DataProvider 的批注的方法。这个注解只有一个字符串属性:它的名字。如果不提供名称,数据提供者的名称会自动默认方法的名称。数据提供者返回一个对象数组。
让我们看看下面的例子使用数据提供者。第一个例子是 @DataProvider 的使用Vector,String或Integer 作为参数,第二个例子是关于 @DataProvider 的使用对象作为参数。
实例 1
在这里 @DataProvider 通过整数和布尔参数。
创建Java类
创建一个java类PrimeNumberChecker.java。这个类检查,如果是素数。创建这个类在 C:\ > TestNG_WORKSPACE
public class PrimeNumberChecker {
public Boolean validate( final Integer primeNumber) {
for ( int i = 2 ; i < (primeNumber / 2 ); i++) {
if (primeNumber % i == 0 ) {
return false ;
}
}
return true ;
}
}
创建测试案例类
创建一个Java测试类 ParamTestWithDataProvider1.java.
定义方法primeNumbers(),其定义为DataProvider 使用注释。此方法返回的对象数组的数组。
测试方法testPrimeNumberChecker()添加到测试类中。此方法需要一个整数和布尔值作为输入参数。这个方法验证,如果传递的参数是一个素数。
添加注释 @Test (dataProvider = "test1" ) 到此方法。dataProvider的属性被映射到 "test1" .
创建Java类文件名ParamTestWithDataProvider1.java 在 C:\ > TestNG_WORKSPACE
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class ParamTestWithDataProvider1 {
private PrimeNumberChecker primeNumberChecker;
@BeforeMethod
public void initialize() {
primeNumberChecker = new PrimeNumberChecker();
}
@DataProvider (name = "test1" )
public static Object[][] primeNumbers() {
return new Object[][] { { 2 , true }, { 6 , false }, { 19 , true },
{ 22 , false }, { 23 , true } };
}
// This test will run 4 times since we have 5 parameters defined
@Test (dataProvider = "test1" )
public void testPrimeNumberChecker(Integer inputNumber,
Boolean expectedResult) {
System.out.println(inputNumber + " " + expectedResult);
Assert.assertEquals(expectedResult,
primeNumberChecker.validate(inputNumber));
}
}
创建 TESTNG.XML
创建 testng.xml C:\ > TestNG_WORKSPACE 执行测试案例。
<?xml version= "1.0" encoding= "UTF-8" ?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name= "Suite1" >
<test name= "test1" >
<classes>
< class name= "ParamTestWithDataProvider1" />
</classes>
</test>
</suite>
编译使用javac的测试用例类。
C:\TestNG_WORKSPACE>.javac ParamTestWithDataProvider1.java PrimeNumberChecker.java
运行testng.xml.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
验证输出。
2 true
6 false
19 true
22 false
23 true
===============================================
Suite1
Total tests run: 5 , Failures: 0 , Skips: 0
===============================================
实例 2
在这里, @DataProvider 传递对象作为参数。
创建Java类
创建一个Java类 Bean.java, 对象带有 get/set 方法, 在 C:\ > TestNG_WORKSPACE.
public class Bean {
private String val;
private int i;
public Bean(String val, int i){
this .val=val;
this .i=i;
}
public String getVal() {
return val;
}
public void setVal(String val) {
this .val = val;
}
public int getI() {
return i;
}
public void setI( int i) {
this .i = i;
}
}
创建测试案例类
创建一个Java测试类 ParamTestWithDataProvider2.java.
定义方法primeNumbers(),其定义为DataProvider使用注释。此方法返回的对象数组的数组。
添加测试类中测试方法TestMethod()。此方法需要对象的bean作为参数。
添加注释 @Test (dataProvider = "test1" ) 到此方法. dataProvider 属性被映射到 "test1" .
创建Java类文件名 ParamTestWithDataProvider2.java 在 C:\ > TestNG_WORKSPACE
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class ParamTestWithDataProvider2 {
@DataProvider (name = "test1" )
public static Object[][] primeNumbers() {
return new Object[][] { { new Bean( "hi I am the bean" , 111 ) } };
}
@Test (dataProvider = "test1" )
public void testMethod(Bean myBean) {
System.out.println(myBean.getVal() + " " + myBean.getI());
}
}
创建 TESTNG.XML
创建一个文件 testng.xml C:\ > TestNG_WORKSPACE 来执行测试用例.
<?xml version= "1.0" encoding= "UTF-8" ?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name= "Suite1" >
<test name= "test1" >
<classes>
< class name= "ParamTestWithDataProvider2" />
</classes>
</test>
</suite>
编译使用javac的测试用例类。
C:\TestNG_WORKSPACE>javac ParamTestWithDataProvider2.java Bean.java
运行 testng.xml.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
验证输出。
hi I am the bean 111
===============================================
Suite1
Total tests run: 1 , Failures: 0 , Skips: 0
===============================================
|
相关资源