Pull to refresh

Comments 9

JUnit молодцы, что развивают свой фреймфорк. Пока читал статью, во многом создавалось впечатление, что читаю про фишки TestNG, которые использовал ранее в своем проекте, но есть и новое, чего в нем не видел. Ну и о наболевшем: в JUnit не могу понять разработчиков, почему в методах типа assertEquals у них такой порядок аргументов: «эталон(1) сравнивают с полученным значением(2)», а не «полученное значение(1) сравнивают с эталоном(2)». В реальной жизни обычно происходит по второму сценарию.
Я всегда пишу if (42 == x) {… в коде
Мне так IntelliJ IDEA рекомендует.

Замечу, что в JUnit 5 пока еще не нет эквивалентов для некоторых вещей из JUnit 4.


Например нет timeout для тестов (есть только возможность проверить, выполнился ли блок кода за указанное время) — это пока только в планах. Нет эквивалента @Rule Timeout (возможность задать дэфолтный timeout для тестов) и текущее API для extensions не позволяет сделать его аналог (а в JUnit 4 — такое можно было сделать руками).


Так что если у вас в тестах используются timeout-ы или @Rule хоть в каком-то виде, то есть вероятность, что смигрировать на JUnit 5 без потерь не получится.

Ну так выполнился ли блок кода за указанное время — это же и есть timeout для тестов. Просто весь код теста положить в assertTimeout и будет тоже самое.

Нет, совсем не то же самое. Допустим у вас блок кода по факту работает 5 минут, а на тесте вы выставили таймаут в 10 секунд.


В JUnit 4 вы через 10 секунд получите таймаут, а thread с тестом будет остановлен. Полное время выполнения теста — около 10 секунд.


В JUnit 5 тест отработает все 5 минут и уже после этого будет отмечен как неудачный. Полное время работы теста — 5 минут.


Еще хуже, если у вас тест иногда виснет (и как раз по этой причине вы выставили таймаут) — в JUnit 5 такой тест никогда не остановится.

Отмечу, что проблему для одного теста можно решить используя assertTimeoutPreemptively. Но это не подходит, если вы хотите задать таймаут по-умолчанию — ведь придётся завернуть в лямбду тело каждого теста, что "совсем не круто".

UFO just landed and posted this here
Если вы укажите над классом @TestInstance(Lifecycle.PER_CLASS) то вы можете не делать @BeforeAll/@AfterAll статическими. Это же работает и для Котлина.
Sign up to leave a comment.

Articles