TestNG срещу JUnit: Каква е разликата?

Съдържание:

Anonim

Както Testng, така и Junit са тестова рамка, използвана за единично тестване. TestNG е подобен на JUnit. Към него са добавени малко повече функционалности, които правят TestNG по-мощен от JUnit.

Този урок е фокусиран основно върху анализирането на функциите на JUnit и TestNG. Помага на разработчиците да решат коя рамка да се използва за Unit Testing. Нека първо да анализираме приликите между TestNG и JUnit4.

TestNG е тестова рамка, вдъхновена от JUnit и NUnit.

Ето таблицата, която показва функциите, поддържани от JUnit и TestNG.

JUnit4 и TestNG Feature сравнение

И TestNG, и JUnit4 изглеждат сходни, с изключение на една или две функции. Нека направим сравнение между двете, за да решим бързо коя технология е по-благоприятна за Unit Testing. По-долу таблицата подчертава функциите, поддържани и от двете:

Анотации

Както JUnit, така и TestNG използват пояснения и почти всички пояснения изглеждат сходни.

TestNG използва @BeforeMethod, @ AfterMethod подобно на @Before, @ After в JUnit4.

И TestNG, и Junit4 използват @Test (timeout = 1000) за изчакване. Проверете таблицата по-долу за повече подробности-

SN Описание Тест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 изчакване @ Тест (изчакване = 1000) @ Тест (изчакване = 1000)
9 Изпълнява се преди всички тестове в пакета @BeforeSuite n / a
10 Изпълнява се след всички тестове в пакета @AfterSuite n / a
11. Изпълнява се преди тест @BeforeTest n / a
12 Изпълнява се след тест @AfterTest n / a
13 Изпълнява се преди извикването на първия метод за тестване, който принадлежи към някоя от тези групи @BeforeGroups n / a
14. стартирайте след последния тест метод, който принадлежи към някоя от групите тук @AfterGroups n / a

Тест на Suite

Комплектите се използват за изпълнение на множество тестове заедно. Комплектите могат да бъдат създадени с помощта на 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 описва използването на suite по време на работа с TestNG:

<класове>

Тест за игнориране

Използвайки и двете, можем да пропуснем тест. Нека го видим, използвайки пример с код, както е даден по-долу:

Използване на JUnit4

По-долу кодов фрагмент описва използването на анотация @ignore по време на работа с JUnit4:

@Игнорирайpublic void method1 (){System.out.println ("Използване на @Ignore, това изпълнение се игнорира");}

Използване на TestNG

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

@ Тест (активиран = невярно)публична невалидна 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:

@ Тест (изчакване = 1000)public void method1 (){докато (вярно);}

Използване на TestNG

По-долу кодов фрагмент описва използването на тест за изчакване при работа с TestNG:

@ Тест (timeOut = 1000)public void method1 (){докато (вярно);}

Параметризиран тест

JUnit осигурява по-лесен и четим подход за тест, известен като Параметризиран тест. И TestNG, и JUnit поддържат параметризиран тест, но се различават по начина, по който определят стойността на параметъра. Нека да видим това едно по едно.

Използване на JUnit4

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

@RunWith (стойност = Параметризиран.клас)публичен клас JunitTest {privateint номер;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 {@Тест@ Параметри (стойност = "брой")public void parameterTest (int номер){System.out.println ("Параметризираният номер е: + номер);}}

Вижте по-долу xml файл, който ще се използва за горния клас:

<параметър име = "число" стойност = "2" /><класове>

Резюме:

В детайли видяхме сравнение на JUnit4 и TestNG. Също така видяхме, че и двете са подобни, с изключение на параметризирания тест и теста за зависимост. Накратко можем да кажем, че въз основа на гъвкавостта и изискванията можем да изберем всеки един от тях за Unit Testing.