І 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 = число;}@ Параметризагальнодоступна статична колекція
Використання TestNG
У TestNG файл XML або "@DataProvider" використовується для забезпечення параметра для тестування.
Тут анотація @Parameters, оголошена в методі, потребує параметра для тестування. Дані, що використовуються як параметр, надаватимуться у файлах конфігурації XML TestNG. Роблячи це, ми можемо повторно використовувати один тест з різними наборами даних, і ми можемо отримати різні результати.
публічний клас Test1 {@ Тест@Parameters (value = "number")public void parameterTest (int number){System.out.println ("Параметризований номер: + число);}}
Дивіться нижче файл xml, який буде використовуватися для вищезазначеного класу:
<ім'я параметра = "число" значення = "2" /><класи>
Короткий зміст:
Ми детально бачили порівняння JUnit4 та TestNG. Ми також побачили, що обидва подібні, крім параметризованого тесту та тесту на залежність. Коротше кажучи, на основі гнучкості та вимог ми можемо вибрати будь-який з них для модульного тестування.
- Далі