Автор оригинала: Pankaj Kumar.
JUnit и TestNG являются наиболее популярными фреймворками тестирования Java-приложений. Обе эти структуры действительно хороши и просты в использовании. Поэтому, когда дело доходит до выбора платформы тестирования для вашего приложения, лучше иметь представление на высоком уровне о том, какие функции присутствуют в том или ином приложении, а затем принимать обоснованное решение на основе требований вашего проекта.
JUnit против TestNG
Текущая версия JUnit-5.2.0, и она все еще развивается и работает над включением дополнительных функций. Текущая версия TestNG-6.14.3, она зрелая и богата функциями.
В таблице ниже сравниваются JUnit и TestNG по различным функциям. Обратите внимание, что я исключил очень специфические или общие функции, присутствующие в обеих этих средах, такие как исключения тестирования, настройки времени ожидания, методы обратного вызова жизненного цикла и т.д.
| Аннотации На Основе | Аннотации | Аннотации На Основе | И JUnit 5, и тестирование основаны на аннотациях, и они похожи по своей природе и поведению. | Аннотации JUnit, аннотации TestNG |
| Единый модуль для получения всех функций тестирования | Простота использования | JUnit 5 встроен в различные модули, вам нужна платформа JUnit и JUnit Jupiter для написания тестовых примеров. Если вам нужны дополнительные функции, такие как параметризованные тесты, вам необходимо добавить модуль junit-jupiter-params. | Тестирование лучше с точки зрения простоты использования. | Зависимость JUnit Maven, проверка зависимости Maven |
| Поддерживается в основных IDE, таких как Eclipse и IntelliJ IDEA | Поддержка IDE | Поддерживается в основных IDE, таких как Eclipse и IntelliJ IDEA | Оба они похожи и обеспечивают легкую интеграцию с основными IDE. | JUnit Тестирует Eclipse, плагин TestNG Eclipse |
| Поддерживает методы поставщика данных и из xml-файла набора тестов. | Поставщик Данных | Поддерживает несколько способов предоставления тестовых данных, таких как методы, перечисление, CSV, CSV-файлы и т.д. | JUnit лучше подходит для ввода входных данных методов тестирования | Параметризованные тесты JUnit, поставщик данных TestNG, Параметры TestNG |
| Тестовые случаи тестирования выполняются как набор тестов. Мы можем использовать аннотацию @Factory для запуска нескольких тестовых классов. Поддержка XML TestNG отлично подходит для создания сложных наборов тестов, которые слабо связаны с вашими тестовыми наборами. | Набор Тестов | JUnit 5 еще не поддерживает наборы тестов, на момент написания этого поста работа над ним продолжалась. Следуйте этой проблеме на GitHub, чтобы проверить текущее состояние. | Тестирование лучше подходит для наборов тестов | Тестирование @Factory, набор XML для тестирования |
| Тестирование автоматически создает отчеты в формате HTML для выполнения теста. | Отчеты в формате HTML | Нам нужен внешний плагин maven-surefire-report-плагин для создания отчетов в формате HTML | Отчеты по тестированию HTML выглядят устаревшими, но они просты в использовании. Если вам нужно поделиться HTML-отчетами с другими, я бы предложил использовать JUnit. | HTML-отчет JUnit, Учебник по тестированию |
| Мы можем использовать метод TestNG run() для выполнения тестов из основного метода java. | Запуск из основного метода Java | Мы можем использовать API запуска JUnit 5 для запуска тестов из основного метода java. | Оба они поддерживают выполнение тестовых случаев из основного метода java. | Документы JUnit Launcher API, тесты TestNG из основного метода Java |
| Тестирование предоставляет достаточно методов утверждения для сравнения ожидаемых и фактических результатов тестирования | Утверждения | JUnit предоставляет достаточно методов утверждения для сравнения ожидаемых и фактических результатов тестирования | Оба они похожи с точки зрения поддержки утверждений | Утверждения JUnit |
| Тестирование не поддерживает предположения | Допущения | JUnit поддерживает предположения о пропуске тестов на основе определенных условий | JUnit лучше, если вы хотите пропустить тесты, основанные на условиях | Предположения JUnit |
| Тестирование поддерживает упорядочение методов тестирования с помощью атрибута приоритета | Тестовый Заказ | JUnit 5 пока не поддерживает тестовый заказ, он запланирован на выпуск 5.3. Следуйте этой проблеме на GitHub, чтобы проверить текущее состояние. | Тестирование лучше, когда вы хотите выполнять тесты в определенном порядке. | |
| Тестирование поддерживает отключение тестов, но его функциональность ограничена | Отключить Тесты | JUnit поддерживает множество способов отключения и включения тестов. Например, на основе ОС, JRE, системных свойств | JUnit лучше, когда вы хотите отключить или включить тесты на основе условий | JUnit Отключает Тесты, Тестирование Отключает Тесты |
| Тестирование поддерживает параллельное выполнение, если оно выполняется через XML-пакет. | Параллельное Выполнение | На сегодняшний день JUnit 5 не поддерживает параллельное выполнение. Следуйте этой проблеме на GitHub, чтобы проверить текущее состояние. | Тестирование лучше для параллельного выполнения на данный момент продолжается разработка JUnit 5 для поддержки этой функции. | Тестирование Параллельного Выполнения |
| Тестирование поддерживает различные типы слушателей и может быть добавлено с помощью аннотаций. | Слушатели | JUnit поддерживает прослушиватели через API запуска, нет механизма добавления прослушивателей с помощью аннотаций. | Поддержка прослушивателя TestNG намного лучше по сравнению с JUnit 5. | Прослушиватели TestNG |
Резюме
Приведенное выше сравнение функций TestNG и JUnit должно помочь вам найти идеальное решение для вашего приложения. Оба они являются хорошими фреймворками для тестирования или java-приложениями. Тем не менее, JUnit 5 все еще развивается, и в следующих выпусках у него будут все недостающие функции.