JUnit vs TestNG - PullRequest
       105

JUnit vs TestNG

117 голосов
/ 09 августа 2008

На работе мы все еще используем JUnit 3 для запуска наших тестов. Мы рассматривали возможность перехода на JUnit 4 для написания новых тестов, но я некоторое время следил за TestNG. Какой у вас был опыт работы с JUnit 4 или TestNG, и который, кажется, работает лучше для очень большого количества тестов? Гибкость в написании тестов также важна для нас, поскольку наши функциональные тесты охватывают широкий аспект и должны быть написаны различными способами, чтобы получить результаты.

Старые тесты не будут переписываться, поскольку они отлично справляются со своей работой. Что я хотел бы видеть в новых тестах, так это гибкость в способах написания теста, естественные утверждения, группировка и легко распределенные выполнения теста.

Ответы [ 14 ]

62 голосов
/ 09 августа 2008

Я использовал оба, но я должен согласиться с Джастином Стандартом, что вам не стоит задумываться о переписывании существующих тестов в какой-либо новый формат. Независимо от решения, довольно тривиально запустить оба. TestNG стремится быть гораздо более настраиваемым, чем JUnit, но в итоге они оба работают одинаково хорошо.

TestNG имеет удобную функцию, с помощью которой вы можете пометить тесты как определенную группу, а затем легко запускать все тесты определенной группы или исключать тесты определенной группы. Таким образом, вы можете пометить тесты, которые выполняются медленно, как в «медленной» группе, а затем игнорировать их, когда вы хотите быстрых результатов. Предложение из их документации состоит в том, чтобы пометить некоторое подмножество как «проверочные» тесты, которые должны выполняться всякий раз, когда вы регистрируете новые файлы. Я никогда не видел такой функции в JUnit, но, опять же, если у вас ее нет, вы не ДЕЙСТВИТЕЛЬНО скучаю по нему.

При всех его претензиях на высокую конфигурацию я столкнулся с угловым делом пару недель назад, где я не мог сделать то, что хотел ... Я хотел бы вспомнить, что это такое, но я хотел поднимите его, чтобы вы знали, что он не идеален.

Самое большое преимущество TestNG - это аннотации ... которые JUnit добавил в версии 4 в любом случае.

20 голосов
/ 09 августа 2008

Во-первых, я бы сказал, не переписывайте все свои тесты только для того, чтобы соответствовать последней моде. Junit3 работает на отлично, а введение аннотаций в 4 не особо выгодно (по моему мнению). Гораздо важнее, что вы, ребята, пишете тесты, и это звучит так, как вы.

Используйте все, что кажется наиболее естественным и поможет вам выполнить свою работу.

Я не могу комментировать TestNG, потому что я не использовал его. Но я бы порекомендовал unitils , отличный упаковщик для JUnit / TestNG / DBUnit / EasyMock, независимо от того, какой маршрут вы выберете. (Поддерживает все вкусы, упомянутые выше)

19 голосов
/ 09 августа 2008

Примерно год назад у нас была такая же проблема. Я потратил некоторое время на обдумывание того, какой ход лучше, и в конце концов мы поняли, что TestNG не имеет «убийственных функций». Это приятно и имеет некоторые функции, которых нет в JUnit 4, но они нам не нужны.
Мы не хотели, чтобы люди чувствовали себя некомфортно при написании тестов, знакомясь с TestNG, потому что мы хотели, чтобы они продолжали писать много тестов.
Кроме того, JUnit в значительной степени является стандартом де-факто в мире Java. Нет достойного инструмента, который не поддерживает его из коробки, вы можете найти много помощи в Интернете, и в прошлом году они добавили много новых функций, которые показывают, что он жив.

Мы решили придерживаться JUnit и никогда не оглядывались назад.

17 голосов
/ 18 августа 2008

Самыми крупными картами розыгрыша TestNG для меня являются его группы тестов поддержки и, что более важно, зависимости групп тестов (если пометить тест как зависимый от группы, тесты просто пропускаются при сбое зависимой группы).

Другие важные карты TestNG для меня включают параметры тестирования, поставщиков данных, преобразователей аннотаций и, более того, живое и отзывчивое сообщество пользователей.

Хотя на первый взгляд может показаться, что не все вышеперечисленные функции TestNG могут не понадобиться, как только вы начнете понимать гибкость, которую приносят в ваши тесты, вы удивитесь, как справились с JUnit.

(отказ от ответственности - я вообще не использовал JUnit 4.x, поэтому я не могу прокомментировать здесь улучшения или новые функции).

15 голосов
/ 19 августа 2010

Приветствует все вышеперечисленное. Некоторые другие вещи, которые я лично нашел, мне нравятся больше в TestNG:

  1. @BeforeClass для TestNG имеет место после создания класса, поэтому вы не ограничены только возможностью вызывать статические методы вашего класса в нем.

  2. Параллельные и параметризованные тесты, возможно, мне просто не хватает жизни ... но я просто получаю удовольствие от написания одного набора тестов Selenium, принимая имя драйвера в качестве параметра. Затем определите 3 параллельные тестовые группы, по одной для водителей IE, FF и Chrome, и наблюдайте за гонкой! Первоначально я сделал 4, но слишком много страниц, над которыми я работал, ломает драйвер HtmlUnit по той или иной причине.

Да, наверное, нужно найти эту жизнь. ;)

10 голосов
/ 05 августа 2009

Я хотел бы поделиться тем, с чем я столкнулся сегодня. Я обнаружил, что встроенный Parameterized runner довольно груб в Junit4 по сравнению с TestNG (я знаю, что у каждого фреймворка есть свои сильные стороны, но все же). Аннотация @parameters Junit4 ограничена одним набором параметров. Я столкнулся с этой проблемой при тестировании допустимого и недействительного поведения для функциональности в том же тестовом классе. Таким образом, будет использоваться первый открытый статический аннотированный метод, который он найдет, но он может найти их в любом порядке. Это заставляет нас писать разные классы без необходимости. Однако TestNG предоставляет чистый способ предоставления различных типов поставщиков данных для каждого метода. Таким образом, мы можем протестировать одну и ту же единицу кода допустимым и недопустимым способом в одном и том же тестовом классе, поместив действительные / недействительные данные отдельно. Я пойду с TestNG.

7 голосов
/ 10 января 2009

Также еще одним преимуществом TestNG является поддержка параллельного тестирования. Я думаю, что в нашу эру многоядерных технологий это важно.

Я также использовал обе платформы. Но я использовал Hamcrest для утверждений. Hamcrest позволяет вам легко написать свой собственный метод assert. Так что вместо

assertEquals(operation.getStatus(), Operation.Status.Active);

Вы можете написать

assertThat(operation, isActive());

Это дает вам возможность использовать более высокий уровень абстракции в ваших тестах. И это делает ваши тесты более надежными.

5 голосов
/ 30 июня 2016

JUnit 4 Vs TestNG - Сравнение от mkyong.com (обновлено в 2013 году).

Заключение: Я предлагаю использовать TestNG в качестве базового модульного тестового фреймворка для проекта Java, потому что TestNG продвинулся на * в параметризованном тестировании, тестировании зависимостей и тестировании комплекта (концепция группировки).

TestNG предназначен для функционального тестирования высокого уровня и комплексного тестирования интеграции. Его гибкость особенно полезна для больших наборов тестов.

Кроме того, TestNG также охватывает всю базовую функциональность JUnit4 . У меня больше нет причин использовать JUnit.

In simple terms, TestNG = JUnit + lot more...So, Why debate ? go and grab TestNG :-)

Более подробное сравнение можно найти здесь .

5 голосов
/ 05 сентября 2008

Несколько дополнений к ответу Майка Стоуна:

1) Чаще всего я использую группы TestNG, когда хочу запустить один метод тестирования в наборе тестов. Я просто добавляю этот тест в группу «Фил», а затем запускаю эту группу. Когда я использовал JUnit 3, я закомментировал записи для всех методов, кроме того, который я хотел запустить в методе «suite», но затем обычно забывал раскомментировать их перед проверкой. С группами у меня больше нет этой проблемы.

2) В зависимости от сложности тестов, перенос тестов с JUnit3 на TestNG может выполняться несколько автоматически с помощью sed и создания базового класса для замены TestCase, который статически импортирует все методы TestNG assert.

У меня есть информация о моей миграции с JUnit на TestNG здесь и здесь .

3 голосов
/ 12 декабря 2017

Почему мы используем TestNG вместо JUnit?

  1. Объявление методов @BeforeClass и @AfterClass должно быть статическим в JUnit, тогда как TestNG обладает большей гибкостью в объявлении метода, у него нет этих ограничений.

  2. В TestNG мы можем параметризовать тесты, используя 2 способа . @Parameter или @DataProvider аннотация.

    i) @ Параметр для простых случаев, когда требуется сопоставление значения ключа (данные предоставляются через XML-файл)

    ii) @ DataProvider для сложных случаев. Используя 2-мерный массив, он может предоставить данные.

  3. В TestNG, поскольку метод @DataProvider не обязательно должен быть статическим, мы можем использовать несколько методов поставщика данных в одном и том же классе теста.

  4. Проверка зависимостей: В TestNG, если первоначальный тест не пройден, все последующие зависимые тесты будут пропущены, а не помечены как неудачные. Но JUnit отметил, что это не удалось.

  5. Группировка: Отдельные тесты могут принадлежать нескольким группам и затем выполняться в разных контекстах (например, медленные или быстрые тесты). Аналогичная функция существует в категориях JUnit, но в ней отсутствуют аннотации @BeforeGroups / @AfterGroups TestNG, которые позволяют инициализировать тестирование / завершить его.

  6. Параллелизм: Если вы хотите запустить один и тот же тест параллельно в нескольких потоках, TestNG предоставит вам простую в использовании аннотацию, в то время как JUnit не предлагает простой способ сделать это из коробки.

  7. TestNG @DataProvider также может поддерживать XML для подачи данных, файлов CSV или даже текстовых файлов.

  8. TestNG позволяет объявлять зависимости между тестами и пропускать их, если тест на зависимости не прошел.

@ Test (depenOnMethods = {"depenOnSomething"})

Эта функциональность не существует в JUnit

  1. Отчетность:

Отчеты TestNG по умолчанию создаются в папке с тестовым выходом, которая включает в себя отчеты HTML со всеми тестовыми данными, прошедшими / не пройденными / пропущенными, как долго они выполнялись, какой вход использовался и полные журналы тестов. Кроме того, он также экспортирует все в файл XML, который можно использовать для создания собственного шаблона отчета.

На фронте JUnit все эти данные также доступны через XML, но нет готового отчета, и вам нужно полагаться на плагины.

Ссылка на ресурс:

  1. Сравнение Quick JUnit и TestNG
  2. JUnit против TestNG: какую среду тестирования выбрать?

Хорошая разница дается в этом уроке бок о бок: TestNG против JUnit: в чем разница?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...