Java TestNG-如何传递变量';s值作为数据提供程序名称?
我有一个字符串变量Java TestNG-如何传递变量';s值作为数据提供程序名称?,java,testng,testng-dataprovider,Java,Testng,Testng Dataprovider,我有一个字符串变量,它设置了,可以保存3个值“prd”、“stg”和“int”。在测试中,我希望以dataProvider的身份传递值,如下所示: @Test(enabled=true,dataProvider=whichSet,dataProviderClass=TestDataProvider.class) 但我有以下错误: The value for annotation attribute Test.dataProvider must be a constant expression
,它设置了,可以保存3个值“prd”、“stg”和“int”。在测试中,我希望以dataProvider的身份传递值,如下所示:
@Test(enabled=true,dataProvider=whichSet,dataProviderClass=TestDataProvider.class)
但我有以下错误:
The value for annotation attribute Test.dataProvider must be a constant expression
我已经有3个提供商被定义为:
@DataProvider(name="stg")
@DataProvider(name="prd")
@DataProvider(name="int")
由于我正在从另一个类(不在测试类中)读取数据提供程序,因此我无法根据某些测试条件将值传递给该类。无论如何,我可以让dataProvider=whichSet
工作吗?谢谢基本上,您正在尝试向数据提供程序添加配置文件
应该有一个外部参数来驱动此操作。我解决这个问题的方法是使用JVM选项
public class Testng {
@DataProvider(name = "data-provider")
public Object[][] dataProviderMethod() {
switch(System.getProperty("env")) {
case "int":
return new Object[][] { { "int data one" }, { "data two" } };
case "stg":
return new Object[][] { { "stage data one" }, { "data two" } };
case "prod":
return new Object[][] { { "production data one" }, { "data two" } };
default:
return new Object[][] { { "int data one" }, { "data two" } };
}
}
@Test(enabled = true, dataProvider = "data-provider", dataProviderClass = Testng.class)
public void test(String data) {
System.out.println(data);
}
}
并使用JVM系统属性运行测试
Eclipse:
CLI
java-Denv=prod-cp.“../lib/*”org.testng.testng testng.xml
基本上,您正在尝试将配置文件添加到数据提供程序中
应该有一个外部参数来驱动此操作。我解决这个问题的方法是使用JVM选项
public class Testng {
@DataProvider(name = "data-provider")
public Object[][] dataProviderMethod() {
switch(System.getProperty("env")) {
case "int":
return new Object[][] { { "int data one" }, { "data two" } };
case "stg":
return new Object[][] { { "stage data one" }, { "data two" } };
case "prod":
return new Object[][] { { "production data one" }, { "data two" } };
default:
return new Object[][] { { "int data one" }, { "data two" } };
}
}
@Test(enabled = true, dataProvider = "data-provider", dataProviderClass = Testng.class)
public void test(String data) {
System.out.println(data);
}
}
并使用JVM系统属性运行测试
Eclipse:
CLI
java-Denv=prod-cp.“../lib/*”org.testng.testng testng.xml
注释无法接受变量。如果您可以将whichSet
设置为常量,例如公共静态最终字符串whichSet=“prd”
可以在测试中使用。但是你不能改变。哦,我明白了,谢谢@PasupathiRajamanickam您是否建议通过其他方式传递env,以便我们可以相应地选择数据集?因为我们不能将其作为参数传递,所以注释不能接受变量。如果您可以将whichSet
设置为常量,例如公共静态最终字符串whichSet=“prd”
可以在测试中使用。但是你不能改变。哦,我明白了,谢谢@PasupathiRajamanickam您是否建议通过其他方式传递env,以便我们可以相应地选择数据集?因为我们不能将其作为参数传递