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) для таймауту. Перегляньте таблицю нижче, щоб отримати докладнішу інформацію -

СН Опис ТестNG JUnit 4
1 Тестова анотація @ Тест @ Тест
2 Виконується до виклику першого методу тестування в поточному класі @BeforeClass @BeforeClass
3 Виконується після всіх методів тестування в поточному класі @Після занять @Після занять
4 Виконується перед кожним методом випробування @BeforeMethod @ Перед тим
5 Виконується після кожного методу випробування @AfterMethod @Після
6 анотація для ігнорування тесту @Test (enable = false) @ignore
7 анотація для виключення @Test (очікуванийExceptions = 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

Нижче клас описує використання suite під час роботи з JUnit4:

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

Використання TestNG

TestNG використовує xml для збору всіх тестів в одному місці. Нижче xml описує використання пакету під час роботи з TestNG:

<класи>

Ігнорувати тест

Використовуючи обидва, ми можемо пропустити тест. Подивимось на прикладі коду, як показано нижче:

Використання JUnit4

Нижче фрагмент коду описує використання анотації @ignore під час роботи з JUnit4:

@ Ігноруватиpublic void method1 (){System.out.println ("За допомогою @Ignore це виконання ігнорується");}

Використання TestNG

Нижче фрагмент коду описує використання анотації @Test (enabled = false) під час роботи з TestNG:

@Test (увімкнено = false)public void TestWithException (){System.out.println ("Метод слід ігнорувати, оскільки він ще не готовий");}

Тест на виняток

Тестування на винятки доступне як у TestNG, так і в JUnit4. Він використовується для перевірки, який виняток викидається з тесту?

Використання JUnit4

Нижче фрагмент коду описує використання тесту винятків під час роботи з JUnit4:

@Test (очікується = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}

Використання TestNG

Нижче фрагмент коду описує використання тесту винятків під час роботи з TestNG:

@Test (очікуванийExceptions = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}

Час вийшов

Ця функція реалізована як у TestNg, так і в JUnit4.Timeout використовується для завершення тесту, який займає більше часу, ніж зазначений час (у мілісекундах).

Використання JUnit4

Нижче фрагмент коду описує використання тесту очікування під час роботи з JUnit4:

@Test (час очікування = 1000)public void method1 (){в той час (правда);}

Використання TestNG

Нижче фрагмент коду описує використання тесту тайм-ауту під час роботи з TestNG:

@Test (timeOut = 1000)public void method1 (){в той час (правда);}

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

JUnit забезпечує простіший і читабельніший підхід до тесту, відомий як Параметризований тест. І TestNG, і JUnit підтримують параметризований тест, але відрізняються способом визначення значення параметра. Давайте подивимось це по одному.

Використання JUnit4

Анотації "@RunWith" та "@Parameter" використовуються для надання значення параметра для одиничного тесту. Анотація @Parameters повинна повернути List []. Цей параметр буде переданий в конструктор класу як аргумент.

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

Використання TestNG

У TestNG файл XML або "@DataProvider" використовується для забезпечення параметра для тестування.

Тут анотація @Parameters, оголошена в методі, потребує параметра для тестування. Дані, що використовуються як параметр, надаватимуться у файлах конфігурації XML TestNG. Роблячи це, ми можемо повторно використовувати один тест з різними наборами даних, і ми можемо отримати різні результати.

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

Дивіться нижче файл xml, який буде використовуватися для вищезазначеного класу:

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

Короткий зміст:

Ми детально бачили порівняння JUnit4 та TestNG. Ми також побачили, що обидва подібні, крім параметризованого тесту та тесту на залежність. Коротше кажучи, на основі гнучкості та вимог ми можемо вибрати будь-який з них для модульного тестування.