测试NG - 使用setTestClasses()传递参数

时间:2011-03-23 15:09:19

标签: java class parameters testng

我正在使用以编程方式运行Courier类中包含的测试。

TestListenerAdapter tla = new TestListenerAdapter();
TestNG testng = new TestNG();
testng.setTestClasses(new Class[] { Courier.class });
testng.addListener(tla);
testng.run();

如何将参数传递给此类中包含的测试? e.g。

testng.setTestClasses(new Class[] { Courier("parameter").class });

快递:

public class Courier {
@Parameter(passed parameter)
@Test
public void Courier_Test(String parameter){
    System.out.println(parameter);
}   

}

感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

一些想法:

即使您以编程方式运行测试,也应该能够在testng.xml文件上调用TestNG。像这样添加参数(来自documentation):

<suite name="My suite">
   <parameter name="parameter"  value="Foo"/>
   <test name="Courier Test" />
   < ... >

如果由于某种原因您没有使用testng.xml文件,您可以使用DataProvider作为测试类中的方法或静态类,具体取决于您需要执行的操作。以下示例(也来自documentation)。

类中的DataProvider:

//This method will provide data to any test method that declares
//that its Data Provider is named "test1"
@DataProvider(name = "test1")
public Object[][] createData1() {
   return new Object[][] {
     new Object[] { "Parameter" }
   }
}

//This test method declares that its data should be supplied 
//by the Data Providernamed "test1"
@Test(dataProvider = "test1")
public void Courier_Test(String parameter) {
 System.out.println(parameter);
} 

外部类中的DataProvider:

public static class StaticProvider {
  @DataProvider(name = "create")
  public static Object[][] createData() {
    return new Object[][] {
      new Object[] { "Parameter" }
    }
  }
}

public class Courier {
  @Test(dataProvider = "create", dataProviderClass = StaticProvider.class)
  public void Courier_Test(String parameter) {
    // ...
  }
}