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