Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

assertThat(operation, isActive());

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

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

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

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

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

JUnit 4 против 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 :-)

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

Мне нравится аккуратная и простая интеграция TestNG с Guice.

Мне ваш вопрос кажется двояким.С одной стороны, вы хотели бы сравнить две среды тестирования, с другой стороны, вы хотели бы легко реализовывать тесты, иметь естественные утверждения и т. д.

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

JUnit по-прежнему требует, чтобы некоторые методы до/после были статическими, что ограничивает ваши возможности перед запуском тестов. У TestNG никогда не возникает этой проблемы.

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

Теперь о том, что я считаю отдельным вопросом: как писать хорошо структурированные, читаемые и поддерживаемые тесты.Я уверен, что большую часть этого вы знаете, но такие вещи, как Заводской образец, Шаблон команды и Объекты страницы (если ваши веб-сайты тестирования) жизненно важны, очень важно иметь уровень абстракции между тем, что вы тестируете (SUT), и тем, чем является фактический тест (утверждения бизнес-логики).Чтобы получить более приятные утверждения, вы можете использовать Хэмкрест.Используйте наследование/интерфейсы Javas, чтобы уменьшить повторение и обеспечить общность.

Чуть не забыл, еще воспользуйтесь Шаблон построителя тестовых данных, это в сочетании с аннотацией поставщика данных TestNG очень полезно.

Мое мнение о том, что делает TestNG действительно более мощным:

1.  JUnit still requires the before/after class methods to be static, which limits
    what you can do prior to the running of tests, TestNG never has this issue.

2.  TestNG @Configuration methods can all take an optional argument to their 
    annotated methods in the form of a ITestResult, XmlTest, Method, or 
    ITestContext.  This allows you to pass things around that JUnit wouldn't 
    provide you.  JUnit only does this in listeners and it is limited in use.

3.  TestNG comes with some pre-made report generation classes that you can copy
     and edit and make into your own beautiful test output with very little 
     effort. Just copy the report class into your project and add a listener 
     to run it.  Also, ReportNG is available.

4.  TestNG has a handful of nice listeners that you can hook onto so you can do
     additional AOP style magic at certain phases during testing.

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

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

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

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

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

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

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

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

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

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

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

@Test(dependentsOnMethods = { "dependentOnSomething" })

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

  1. Составление отчетов:

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

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

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

  1. Быстрое сравнение JUnit и TestNG
  2. JUnit против.ТестНГ:Какую среду тестирования выбрать?

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

оба почти одинаковы.TestNG имеет некоторые дополнительные функции, такие как тестовые наборы и зависимости.пожалуйста, найдите прикрепленный снимок экрана, чтобы получить полное сравнение. полное сравнение Juni5 и TestNG

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top