Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java TestNG-如何传递变量';s值作为数据提供程序名称?_Java_Testng_Testng Dataprovider - Fatal编程技术网

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,以便我们可以相应地选择数据集?因为我们不能将其作为参数传递