当你需要通过复杂的参数或参数需要创建从Java(复杂的对象,对象读取属性文件或数据库等..),在这种情况下,可以将参数传递使用数据提供者。数据提供者@DataProvider的批注的方法。这个注解只有一个字符串属性:它的名字。如果不提供名称,数据提供者的名称会自动默认方法的名称。数据提供者返回一个对象数组。
让我们看看下面的例子使用数据提供者。第一个例子是@DataProvider的使用Vector,String或Integer 作为参数,第二个例子是关于@DataProvider的使用对象作为参数。
实例1
在这里@DataProvider通过整数和布尔参数。
创建Java类
创建一个java类PrimeNumberChecker.java。这个类检查,如果是素数。创建这个类在 C:\ > TestNG_WORKSPACE
publicclassPrimeNumberChecker {
publicBoolean validate(finalInteger primeNumber) {
for(inti =2; i < (primeNumber /2); i++) {
if(primeNumber % i ==0) {
returnfalse;
}
}
returntrue;
}
}
创建测试案例类
创建一个Java测试类 ParamTestWithDataProvider1.java.
定义方法primeNumbers(),其定义为DataProvider 使用注释。此方法返回的对象数组的数组。
测试方法testPrimeNumberChecker()添加到测试类中。此方法需要一个整数和布尔值作为输入参数。这个方法验证,如果传递的参数是一个素数。
添加注释@Test(dataProvider ="test1") 到此方法。dataProvider的属性被映射到"test1".
创建Java类文件名ParamTestWithDataProvider1.java 在 C:\ > TestNG_WORKSPACE
importorg.testng.Assert;
importorg.testng.annotations.BeforeMethod;
importorg.testng.annotations.DataProvider;
importorg.testng.annotations.Test;
publicclassParamTestWithDataProvider1 {
privatePrimeNumberChecker primeNumberChecker;
@BeforeMethod
publicvoidinitialize() {
primeNumberChecker =newPrimeNumberChecker();
}
@DataProvider(name ="test1")
publicstaticObject[][] primeNumbers() {
returnnewObject[][] { {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")
publicvoidtestPrimeNumberChecker(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>
<classname="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
验证输出。
2true
6false
19true
22false
23true
===============================================
Suite1
Total tests run:5, Failures:0, Skips:0
===============================================
实例2
在这里,@DataProvider传递对象作为参数。
创建Java类
创建一个Java类 Bean.java, 对象带有 get/set 方法, 在 C:\ > TestNG_WORKSPACE.
publicclassBean {
privateString val;
privateinti;
publicBean(String val,inti){
this.val=val;
this.i=i;
}
publicString getVal() {
returnval;
}
publicvoidsetVal(String val) {
this.val = val;
}
publicintgetI() {
returni;
}
publicvoidsetI(inti) {
this.i = i;
}
}
创建测试案例类
创建一个Java测试类 ParamTestWithDataProvider2.java.
定义方法primeNumbers(),其定义为DataProvider使用注释。此方法返回的对象数组的数组。
添加测试类中测试方法TestMethod()。此方法需要对象的bean作为参数。
添加注释@Test(dataProvider ="test1") 到此方法. dataProvider 属性被映射到"test1".
创建Java类文件名 ParamTestWithDataProvider2.java 在 C:\ > TestNG_WORKSPACE
importorg.testng.annotations.DataProvider;
importorg.testng.annotations.Test;
publicclassParamTestWithDataProvider2 {
@DataProvider(name ="test1")
publicstaticObject[][] primeNumbers() {
returnnewObject[][] { {newBean("hi I am the bean",111) } };
}
@Test(dataProvider ="test1")
publicvoidtestMethod(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>
<classname="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 bean111
===============================================
Suite1
Total tests run:1, Failures:0, Skips:0
===============================================
|
相关资源