当你需要通过复杂的参数或参数需要创建从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
 ===============================================
  | 
相关资源