TestNG - Как передать значение переменной в качестве имени dataProvider? - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть строковая переменная whichSet, которая может содержать 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 работать? Спасибо

1 Ответ

1 голос
/ 08 ноября 2019

Обычно вы пытаетесь добавить профиль к DataProvider, здесь должен быть внешний параметр, который должен управлять этим. Мой способ решения этой проблемы может быть с помощью параметров 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: enter image description here

CLI

java -Denv=prod -cp ".:../lib/*" org.testng.TestNG testng.xml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...