Перейти к содержимому

Публикации Azur

4 публикаций создано Azur (учитываются публикации только с 20 апреля 2023)


#170348 Не могу использовать списки с параметризацией в JUnit4

Отправлено автор: Azur 10 января 2019 - 06:45 в Selenium - Functional Testing

делайте итератор вокруг этого специального indtended-to-be-flexible теста руками

Извините, не понял о чем речь. Расшифруйте или дайте наводки на мануалы по теме.

 

 

Главное переопределить методы next, hasNext

 

Можете показать пример?




#170312 Не могу использовать списки с параметризацией в JUnit4

Отправлено автор: Azur 06 января 2019 - 08:04 в Selenium - Functional Testing

@Azur  опишите пожауйста ситуацию где надо изменять параметры именно из  `@Before`

Я изучил как раз parameterized-tests и сделал аналогично. Во всех примерах используется готовая коллекция, которая не изменяется во время теста. Мне ее нужно менять.

 

Есть список проектов и ссылки на них на нескольких страницах, пользователи добавляют новые проекты, удаляют старые, список хоть и нечасто, но меняется, я обхожу все страницы и собираю ссылки или id с них в переменную. Внутри каждого проекта нужно выполнить тестовый сценарий, это и есть параметризированный тест, где параметром выступает например id проекта. Я хотел сбор ссылок включить в @BeforeClass, чтобы получать актуальный список перед тестированием.




#170296 Не могу использовать списки с параметризацией в JUnit4

Отправлено автор: Azur 04 января 2019 - 07:17 в Selenium - Functional Testing

похоже идет completely вразрез с первоосновами  (и в testng тоже)

 

 

С удовольствием почитаю почему параметризация идет вразрез с первоосновами. Серьезно, я в java не настолько разбираюсь, чтобы понимать даже очевидные для многих вещи. Я понимаю, что использование юнит-фреймворка в функциональном тестировании это всегда компромиссы. Еще я понимаю, что TestNG в этом аспекте лучше, но в данный момент мне хочется реализовать параметризацию в Junit.

 

попробуйте держать в файле

Я уже думал об этом. Но ссылки, составляющие список параметров теста, могут меняться между прогонами, поэтому придется их записывать в файл заблаговременно. А в Junit нет четкого порядка выполнения тестов. Да и зависимости между тестами не комильфо. В крайнем случае будет использоваться старый список, который обновится в произвольном порядке между другими проверками, а значит для полной проверки тест придется запускать 2 раза. Этот вариант я оставил на потом.

 

Тем не менее, я все же нашел причину. Упростил до итератора:

@Parameterized.Parameters(name = "{index}:TestOf {0}")
public static Iterable data() {
return testvalues;
}

Теперь testvalues это простой список. Но именно при работе со списком появилась другая странность. Тест с параметрами выполняется только по значениям, которые я инициализирую в самом начале тестового класса, если я список пополняю, то новые значения игнорируются. Вот как это выглядит:

List<String> testvalues = new ArrayList<String>(Arrays.asList("google.com","ya.ru","twitter.com"));
@BeforeClass
public static void setup() throws Exception {
...
testvalues.add("link1.ru");
testvalues.add("link2.ru");
testvalues.add("link3.ru");
...
}

В @Test я среди прочего вывожу в консоль testvalues, чтобы убедиться, что новые значения добавились в список. Но параметры теста их игнорируют, только 3 первоначальных значения используются, 3 теста запускается. Сам @BeforeClass работает правильно, ведь там инициализируется драйвер и прочее, а порядок легко проверить. Я не понимаю в чем дело, я не нашел ни в одном мануале по JUnit даже намека на происходящее.




#170261 Не могу использовать списки с параметризацией в JUnit4

Отправлено автор: Azur 28 декабря 2018 - 10:26 в Selenium - Functional Testing

Добрый день. Пытаюсь сделать параметризированные тесты на Webdriver 3 / JUnit4, пока локально в Idea. Начинаю с простого, обход по ссылкам, которые предварительно собраны в виде URL в простой список. Этот список я не могу использовать в качестве параметра. Насколько я понимаю, параметрами могут выступать только объекты.

 

Например я могу объявить объект заранее

Object[] testvalues = new Object[]{"google.com","ya.ru","twitter.com"};

И тогда в тесте он отработает правильно

@RunWith(Parameterized.class)
public class TestParam {

@Parameterized.Parameter
public String domainName;

@Parameterized.Parameters(name = "{index}:TestOf {0}")
public static Object[] data() {
return testvalues;
}

@Test
public void paramTest() {
System.out.println(domainName);
}

}

Фокусы начинаются когда я пытаюсь использовать список ссылок.

1. Я могу сделать объект через toArray()

2. Я могу сделать объект через stream().toArray(n -> new String[n])

3. Я могу сделать объект через stream().toArray(String[]::new)

4. Я не могу добавлять ссылки сразу в объект, потому что он имеет фиксированный размер

 

В результате, если я использую именно сконвертированный объект, то тестовый класс выполняется успешно без параметров, ничего не делая. Я проверял, что на выходе получаются именно объекты с нужным содержимым. Подскажите пожалуйста, где у меня ошибка.