TestNG против JUnit: в чем разница?

Содержание:

Anonim

И Testng, и Junit - это среда тестирования, используемая для модульного тестирования. TestNG похож на JUnit. В него добавлено несколько дополнительных функций, что делает TestNG более мощным, чем JUnit.

Это руководство в основном ориентировано на анализ возможностей JUnit и TestNG. Это помогает разработчикам решить, какой фреймворк следует использовать для модульного тестирования. Давайте сначала проанализируем сходство между TestNG и JUnit4.

TestNG - это среда тестирования, вдохновленная JUnit и NUnit.

Вот таблица, в которой показаны функции, поддерживаемые JUnit и TestNG.

Сравнение функций JUnit4 и TestNG

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

Аннотации

И JUnit, и TestNG используют аннотации, и почти все аннотации похожи.

TestNG использует @BeforeMethod, @ AfterMethod, аналогично @Before, @ After в JUnit4.

И TestNG, и Junit4 используют @Test (timeout = 1000) для тайм-аута. Более подробную информацию смотрите в таблице ниже.

SN Описание TestNG JUnit 4
1 Аннотация теста @Тест @Тест
2 Выполняется перед вызовом первого тестового метода в текущем классе @BeforeClass @BeforeClass
3 Выполняется после всех тестовых методов в текущем классе @После занятий @После занятий
4 Выполняется перед каждым методом тестирования @BeforeMethod @Перед
5 Выполняется после каждого метода тестирования @AfterMethod @После
6 аннотация для игнорирования теста @Test (включить = ложь) @ignore
7 аннотация для исключения @Test (ожидаемые исключения = ArithmeticException.class) @Test (ожидается = ArithmeticException.class)
8 тайм-аут @Test (тайм-аут = 1000) @Test (тайм-аут = 1000)
9 Выполняется перед всеми тестами в комплекте @BeforeSuite н / д
10 Выполняется после всех тестов в пакете @AfterSuite н / д
11 Выполняется перед запуском теста @BeforeTest н / д
12 Выполняется после запуска теста @AfterTest н / д
13 Выполняется перед вызовом первого тестового метода, принадлежащего любой из этих групп. @BeforeGroups н / д
14 запустить после последнего метода тестирования, который принадлежит любой из групп здесь @AfterGroups н / д

Suite Test

Наборы используются для одновременного выполнения нескольких тестов. Наборы могут быть созданы с использованием как TestNG, так и JUnit4. Однако в TestNG комплекты более мощные, так как в нем используются совсем другие методы выполнения тестов. Давайте разберемся с этим, используя фрагмент кода, как показано ниже:

Использование JUnit4

Ниже класс описывает использование набора при работе с JUnit4:

пакет guru99.junit;import org.junit.runner.RunWith;import org.junit.runners.Suite;@RunWith (Suite.class)@ Suite.SuiteClasses ({SuiteTest1.class,SuiteTest2.class,})public class JunitTest {// Этот класс остается пустым, он используется только в качестве держателя для вышеуказанных аннотаций}

Использование TestNG

TestNG использует xml для объединения всех тестов в одном месте. Ниже xml описывается использование набора при работе с TestNG:

<классы>

Игнорировать тест

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

Использование JUnit4

Ниже фрагмент кода описывает использование аннотации @ignore при работе с JUnit4:

@ Игнорироватьобщедоступный метод void1 (){System.out.println («При использовании @Ignore это выполнение игнорируется»);}

Использование TestNG

Во фрагменте кода ниже описано использование аннотации @Test (enabled = false) при работе с TestNG:

@Test (включено = ложь)public void TestWithException (){System.out.println («Метод следует игнорировать, поскольку он еще не готов»);}

Исключительный тест

Тестирование исключений доступно как в TestNG, так и в JUnit4. Он используется для проверки, какое исключение выбрано из теста?

Использование JUnit4

Во фрагменте кода ниже описывается использование теста исключения при работе с JUnit4:

@Test (ожидается = ArithmeticException.class)общественная недействительность DivideByZero (){Int i = 1/0;}

Использование TestNG

Во фрагменте кода ниже описывается использование теста исключения при работе с TestNG:

@Test (ожидаемые исключения = ArithmeticException.class)общественная недействительность DivideByZero (){Int i = 1/0;}

Тайм-аут

Эта функция реализована как в TestNg, так и в JUnit4. Timeout используется для завершения теста, который занимает больше указанного времени (в миллисекундах).

Использование JUnit4

Во фрагменте кода ниже описывается использование теста тайм-аута при работе с JUnit4:

@Test (тайм-аут = 1000)общедоступный метод void1 (){в то время как (правда);}

Использование TestNG

Во фрагменте кода ниже описывается использование теста тайм-аута при работе с TestNG:

@Test (timeOut = 1000)общедоступный метод void1 (){в то время как (правда);}

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

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

Использование JUnit4

Аннотации «@RunWith» и «@Parameter» используются для предоставления значения параметра для модульного теста. Аннотация @Parameters должна возвращать List []. Этот параметр будет передан в конструктор класса в качестве аргумента.

@RunWith (значение = Parameterized.class)public class JunitTest {номер privateint;общедоступный JunitTest6 (целое число){this.number = число;}@ Параметрыобщедоступная статическая коллекция  data (){Объект [] [] данные = новый Объект [] [] {{1}, {2}, {3}, {4}};returnArrays.asList (данные);}@Тестpublic void parameterTest (){System.out.println ("Параметризованное число: + число);}}

Использование TestNG

В TestNG файл XML или «@DataProvider» используется для предоставления параметра для тестирования.

Здесь аннотации @Parameters, объявленной в методе, нужен параметр для тестирования. Данные, используемые в качестве параметра, будут предоставлены в файлах конфигурации TestNG XML. Поступая так, мы можем повторно использовать один тестовый набор с разными наборами данных и получать разные результаты.

public class Test1 {@Тест@Parameters (значение = "число")public void parameterTest (int number){System.out.println ("Параметризованное число: + число);}}

См. Ниже XML-файл, который будет использоваться для вышеуказанного класса:

<имя параметра = "число" значение = "2" /><классы>

Резюме :

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