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

Azur

Регистрация: 15 июн 2011
Offline Активность: 10 янв 2019 14:37
-----

Мои сообщения

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

10 января 2019 - 06:45

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

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

 

 

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

 

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


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

06 января 2019 - 08:04

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

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

 

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


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

04 января 2019 - 07:17

похоже идет 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 даже намека на происходящее.