Введение

TestNG — это фреймворк для тестирования на языке программирования Java, созданный Седриком Бёстом и вдохновлённый JUnit и NUnit. Основная цель разработки TestNG — охват более широкого спектра категорий тестов: модульных, функциональных, сквозных, интеграционных и других, с более мощными и удобными в использовании функциями.

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

TestNG поддерживается, как из коробки, так и через плагины, во всех трех основных Java IDE: Eclipse, IntelliJ IDEA и NetBeans. Он также включает в себя пользовательскую задачу для Apache Ant и поддерживается системой сборки Maven. Сервер непрерывной интеграции Hudson имеет встроенную поддержку TestNG и способен отслеживать и отображать результаты тестов с течением времени. Большинство инструментов для анализа покрытия кода Java, таких как Cobertura, беспрепятственно работают с TestNG. Примечание: поддержка TestNG для Eclipse встроена в Eclipse Marketplace только для версий Eclipse до 2018-09 (4.9). Для более новых версий Eclipse TestNG необходимо устанавливать вручную, следуя инструкциям на сайте TestNG.

Отчетность

TestNG генерирует отчеты о тестировании в форматах HTML и XML. XML-вывод можно преобразовать с помощью задачи Ant JUnitReport для создания отчетов, аналогичных тем, что получаются при использовании JUnit. Начиная с версии 4.6, TestNG также предоставляет API для создания отчетов, позволяющий использовать генераторы отчетов сторонних разработчиков, такие как ReportNG, PDFngreport и TestNG XSLT.

Сравнение с JUnit

TestNG давно соперничает с другим инструментом для тестирования, JUnit. У каждого фреймворка есть свои особенности и преимущества. Дискуссии на Stack Overflow отражают это противостояние.

Примечания

В JUnit 5 методы @BeforeAll и @AfterAll в большинстве случаев должны быть объявлены статическими. TestNG не имеет этого ограничения. TestNG включает в себя четыре дополнительных набора аннотаций для подготовки и завершения работы тестового набора и групп: @BeforeSuite, @AfterSuite, @BeforeTest, @AfterTest, @BeforeGroup и @AfterGroup, @BeforeMethod и @AfterMethod. TestNG также предоставляет поддержку для автоматизации тестирования приложения с помощью Selenium.

Параметризированное испытание

Параметризированное тестирование реализовано в обоих инструментах, но совершенно разными способами. TestNG предоставляет два способа передачи различных значений параметров в тестовый метод: через файл testng.xml и посредством определения метода @DataProvider. В JUnit 5 аннотация @ParameterizedTest позволяет проводить параметризированное тестирование. Эта аннотация используется в сочетании с другой аннотацией, указывающей источник параметризованных аргументов, например, @ValueSource или @EnumSource. Использование @ArgumentsSource позволяет пользователю реализовать более динамический ArgumentsProvider. В JUnit 4 для параметризованных тестов используются аннотации @RunWith и @Parameters, где метод @Parameters должен возвращать массив списков с параметризованными значениями, которые передаются в конструктор тестового класса.

Заключение

Различные пользователи часто предпочитают определенные возможности одной или другой библиотеки. JUnit более широко распространен и часто предустановлен в популярных IDE. TestNG отличается расширенными настройками и поддержкой различных видов тестирования. Выбор наиболее подходящей библиотеки зависит от конкретной задачи и требований.