pelmew
(Григорьева Наталья)
24.Июль.2023 16:54:13
#1
Доброго времени суток!
Вопрос по ParameterizedTest
В “dataprovider” я по API получаю данные теста List
public Object[] dataProvider() {
List<ModelTest> testData;
Integration integration = new Integration();
testData= Integration.getTestData();
Object[] credentials = new Object[testData.size()];
int i = 0;
for (ModelTest data : testData) {
credentials[i] = data;
i++;
}
return credentials;
}
Далее запускаю тесты
@ParameterizedTest
@MethodSource("dataProvider")
public void goTest(ModelTest test) {
Logger.printLog("\n======= Запуск сценария: '" + test.getMainData().getTestName() + "' =======\n");
try {
Verify.initErrors();
new ParserScen().parserStepsScen(test);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
При запуске тестов получаю такое наименование:
[1] util.core.parser.scenario.ModelTest@5835e24a
Можно ли как то указать наименование теста из test.getMainData().getTestName()?
Посмотрите в сторону DisplayName
и DisplayNameGenerator
https://junit.org/junit5/docs/current/user-guide/#writing-tests-display-name-generator
upd. хотя я ещё раз почитал и кажется вопрос был немного про другое.
Если нужно получать имя теста, то можно попробовать его доставать через TestInfo + getDisplayName
- https://www.baeldung.com/junit-get-name-of-currently-executing-test
pelmew
(Григорьева Наталья)
25.Июль.2023 06:51:40
#3
TestInfo + getDisplayName
мне кажется тоже не совсем подходят, это используется для вывода в тесте наименования, где name получаем из названия тестового метода
У меня же наоборот, в самом тесте я могу вывести имя текущего теста.
В моем случае getDisplayName выдает “[1] util.core.parser.scenario.ModelTest@67941d” и проблема как раз в нечитаемости этого имени при прогоне и в отчетах
pelmew
(Григорьева Наталья)
25.Июль.2023 13:34:31
#4
В общем решение оказалось проще
В “dataprovider” передаю не Object[], а Object[][], где в него передаю и name теста
public Object[] dataProvider() {
List<ModelTest> testData;
Integration integration = new Integration();
testData= Integration.getTestData();
Object[] credentials = new Object[testData.size()][2];
int i = 0;
for (ModelTest data : testData) {
credentials[i][0] = data;
credentials[i][1] = data.getMainData().getTestName();
i++;
}
return credentials;
}
И в самом тесте передаю имя в анотации @ParameterizedTest (name = “[{index}] {1}”)
@ParameterizedTest(name = "[{index}] {1}")
@MethodSource("dataProvider")
public void goTest(ModelTest test, String name)) {
Logger.printLog("\n======= Запуск сценария: '" + name + "' =======\n");
try {
Verify.initErrors();
new ParserScen().parserStepsScen(test);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
1 лайк