Какой тестовый фреймворк вы используете: JUnit или TestNG и почему?
Что проверяют
Выбираете ли вы инструмент осознанно и знаете ли его актуальное состояние, а не аргументы десятилетней давности. Следом обычно просят показать, как в выбранном фреймворке сделать параметризованный тест и параллельный запуск.
Как отвечать
Назовите, чем пользуетесь, и объясните выбор возможностями, а не привычкой. Если работали только с одним, так и скажите и покажите, что знаете отличия.
Современный JUnit (начиная с пятой версии, модель Jupiter) закрыл большую часть старых преимуществ TestNG:
- параметризация:
@ParameterizedTestс@ValueSource,@CsvSource,@MethodSource; - группы:
@Tagи фильтрация по тегам в Maven или Gradle; - структура:
@Nestedи@DisplayNameдля читаемых отчётов; - расширения:
@ExtendWith, на них построена интеграция со Spring, Mockito и Testcontainers; - параллельность: включается свойством
junit.jupiter.execution.parallel.enabled=trueвjunit-platform.properties.
У TestNG остаются свои сильные стороны:
- сьюты: в
testng.xmlв одном файле настраиваются наборы тестов, группы и параллельность по методам, классам или тестам; @DataProvider: гибкая параметризация, в том числе с параллельным выполнением наборов данных;- зависимости:
dependsOnMethodsиdependsOnGroups; - перезапуски и слушатели:
IRetryAnalyzer,ITestListener.
Вывод для ответа: в новых проектах, особенно на Spring, разумный выбор по умолчанию это JUnit. TestNG оправдан в унаследованных UI-фреймворках на сьютах или там, где команда завязана на его конфигурацию. Allure и Selenide работают с обоими.
Где спотыкаются
Говорят, что параллельный запуск и удобная параметризация есть только в TestNG. В JUnit 4 это действительно было неудобно, в Jupiter обе вещи встроены.
Строят регресс на dependsOnMethods. Упал один тест, и десяток зависимых помечается пропущенными, а запустить нужный тест отдельно уже нельзя.
Включают параллельность со статическим WebDriver, общим на все потоки. Нужен ThreadLocal или менеджер драйверов, иначе тесты кликают в чужих браузерах.