TestNG vs JUnit - Разница между ними
Ключевая разница между TestNG и JUnit
- TestNG - это Javaоснованная на фреймворке, в то время как JUnit — это платформа модульного тестирования с открытым исходным кодом для JAVA.
- Сравнение TestNG Vs JUnit, TestNG аннотации проще использовать и понимать, чем JUnit.
- TestNG позволяет нам создавать параллельные тесты, тогда как JUnit не поддерживает выполнение параллельных тестов.
- In TestNG, Тестовые случаи могут быть сгруппированы вместе, в то время как в JUnit, Группировать тесты вместе невозможно.

Что такое TestNG?
TestNG — это среда автоматизированного тестирования, в которой NG означает «Следующее поколение». TestNG вдохновлен JUnit который использует аннотации (@). TestNG преодолевает недостатки JUnit и предназначен для того, чтобы сделать сквозное тестирование легко.
. TestNG, вы можете создать правильный отчет и легко узнать, сколько тестовых случаев пройдено, не выполнено или пропущено. Вы можете выполнить неудачные тестовые случаи отдельно.
Что такое Юнит?
JUnit это модуль с открытым исходным кодом Тестирование Фреймворк для JAVA. Это полезно для Java Разработчики для написания и запуска повторяемых тестов. Первоначально его разработали Эрих Гамма и Кент Бек. Это экземпляр архитектуры xUnit. Как следует из названия, он используется для Модульное тестирование небольшого куска кода.
Разработчики, которые следуют методологии, основанной на тестировании, должны сначала написать и выполнить модульный тест, а затем любой код.
Как только вы закончите работу с кодом, вам следует выполнить все тесты, и они должны пройти. Каждый раз, когда добавляется какой-либо код, вам необходимо повторно выполнить все тестовые примеры и убедиться, что ничего не сломано.
Различия между JUnit и TestNG
Оба формата TestNG и JUnit4 выглядит аналогично, за исключением одной или двух особенностей. Давайте сравним их, чтобы быстро решить, какая технология более выгодна для модульного тестирования. В таблице ниже показаны функции, поддерживаемые обоими:
Аннотации
Оба формата JUnit и TestNG использует аннотации, и почти все аннотации выглядят одинаково.
TestNG использует @BeforeMethod , @AfterMethod аналогично @Before , @After в JUnit4.
Оба формата TestNG и Junit4 использует @Test(timeout = 1000) для тайм-аута. Проверьте таблицу ниже для более подробной информации-
| SNA | Описание | TestNG | JUnit 4 |
|---|---|---|---|
| 1 | Тестовая аннотация | @Контрольная работа | @Контрольная работа |
| 2 | Выполняется до вызова первого тестового метода в текущем классе. | @BeforeClass | @BeforeClass |
| 3 | Выполняется после всех тестовых методов в текущем классе. | @После занятий | @После занятий |
| 4 | Выполняется перед каждым методом тестирования | @BeforeMethod | @Перед |
| 5 | Выполняется после каждого метода тестирования | @AfterMethod | @После |
| 6 | аннотация, чтобы игнорировать тест | @Test (включить = ложь) | @игнорировать |
| 7 | аннотация для исключения | @Test(expectedExceptions = ArithmeticException.class) | @Test(ожидается = ArithmeticException.class) |
| 8 | Тайм-аут | @Test (время ожидания = 1000) | @Test (время ожидания = 1000) |
| 9 | Выполняется перед всеми тестами в наборе | @BeforeSuite | н / |
| 10 | Выполняется после всех тестов в наборе | @AfterSuite | н / |
| 11 | Выполняется перед запуском теста | @BeforeTest | н / |
| 12 | Выполняется после запуска теста | @AfterTest | н / |
| 13 | Выполняется до вызова первого метода тестирования, принадлежащего любой из этих групп. | @BeforeGroups | н / |
| 14 | запускать после последнего метода тестирования, который принадлежит любой из групп здесь | @AfterGroups | н / |
Тестовый набор
Пакеты используются для одновременного выполнения нескольких тестов. Наборы могут быть созданы с использованием обоих TestNG и JUnit4. Однако пакеты более эффективны в TestNG поскольку он использует совсем другой метод выполнения тестов. Давайте разберемся в этом, используя фрагмент кода, как показано ниже:
. JUnit4
Ниже класс описывает использование пакета при работе с JUnit4:
package guru99.junit;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
SuiteTest1.class,
SuiteTest2.class,
})
public class JunitTest {
// This class remains empty,it is used only as a holder for the above annotations
}
. TestNG
TestNG использует xml для объединения всех тестов в одном месте. Ниже в xml описано использование пакета при работе с TestNG:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My test suite"> <test name="testing"> <classes> <class name="com.guru99.SuiteTest1" /> <class name="com.guru99.SuiteTest2" /> </classes> </test> </suite>
Игнорировать тест
Используя оба, мы можем пропустить тест. Давайте посмотрим на пример кода, как показано ниже:
. JUnit4
Ниже фрагмент кода описывает использование аннотации @ignore при работе с JUnit4:
@Ignore
public void method1()
{
System.out.println("Using @Ignore , this execution is ignored");
}
. TestNG
Ниже фрагмент кода описывает использование аннотации @Test(enabled=false) при работе с TestNG:
@Test(enabled=false)
public void TestWithException()
{
System.out.println("Method should be ignored as it's not ready yet");
}
Тест исключений
Тестирование исключений доступно как в TestNG и JUnit4. Используется для проверки того, какое исключение выброшено из теста?
. JUnit4
Ниже фрагмент кода описывает использование теста исключений при работе с JUnit4:
@Test(expected = ArithmeticException.class)
public void divideByZero()
{
Int i = 1/0;
}
. TestNG
Ниже фрагмент кода описывает использование теста исключений при работе с TestNG:
@Test(expectedExceptions = ArithmeticException.class)
public void divideByZero()
{
Int i = 1/0;
}
Истек
Эта функция реализована как в TestNg, так и JUnit4.Timeout используется для завершения теста, который занимает больше указанного времени (в миллисекундах).
. JUnit4
Ниже фрагмент кода описывает использование теста тайм-аута при работе с JUnit4:
@Test(timeout = 1000)
public void method1()
{
while (true);
}
. TestNG
Ниже фрагмент кода описывает использование теста тайм-аута при работе с TestNG:
@Test(timeOut = 1000)
public void method1()
{
while (true);
}
Параметризованный тест
JUnit обеспечивает более простой и понятный подход к тестированию, известный как параметризованный тест. Оба TestNG и JUnit поддерживает параметризованный тест, но отличается способом определения значения параметра. Давайте посмотрим на это один за другим.
. JUnit4
Аннотации «@RunWith» и «@Parameter» используются для предоставления значения параметра для модульного теста. Аннотация @Parameters должна возвращать List[]. Этот параметр будет передан в конструктор класса в качестве аргумента.
@RunWith(value = Parameterized.class)
public class JunitTest{
privateint number;
public JunitTest6(int number)
{
this.number = number;
}
@Parameters
public static Collection<Object[]> data()
{
Object[][] data = new Object[][] { { 1 }, { 2 }, { 3 }, { 4 } };
returnArrays.asList(data);
}
@Test
public void parameterTest()
{
System.out.println("Parameterized Number is : " + number);
}
}
. TestNG
In TestNG, XML-файл или «@DataProvider» используется для предоставления параметра для тестирования.
Здесь аннотации @Parameters, объявленной в методе, нужен параметр для тестирования. Данные, используемые в качестве параметра, будут предоставлены в TestNGXML-файлы конфигурации. Сделав это, мы можем повторно использовать один Тестовый кейс с разными наборами данных, и мы можем получить разные результаты.
public class Test1 {
@Test
@Parameters(value="number")
public void parameterTest(int number)
{
System.out.println("Parameterized Number is : " + number);
}
}
См. ниже XML-файл, который будет использоваться для вышеуказанного класса:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite">
<test name="testing">
<parameter name="number" value="2"/>
<classes>
<class name="com.guru99.Test1" />
</classes>
</test>
</suite>
Резюме
Мы видели, JUnit4 и TestNG сравнение в деталях. Мы также увидели, что оба похожи, за исключением параметризованного теста и теста зависимости. Короче говоря, мы можем сказать, что на основе гибкости и требований мы можем выбрать любой из них для модульного тестирования.

