TestNG vs JUnit – Разлика между тях
Ключова разлика между TestNG намлява JUnit
- TestNG е Java-базирана рамка, докато JUnit е рамка за модулно тестване с отворен код за JAVA.
- Сравнение TestNG Vs JUnit, TestNG анотациите са по-лесни за използване и разбиране от JUnit.
- TestNG ни позволява да създаваме паралелни тестове, докато JUnit не поддържа изпълнение на паралелни тестове.
- In TestNG, Тестовите случаи могат да бъдат групирани заедно, докато в JUnit, Групаping провеждането на тестове заедно не е възможно.

Какво е TestNG?
TestNG е рамка за автоматизирано тестване, в която NG означава „следващо поколение“. TestNG е вдъхновен от JUnit който използва анотациите (@). TestNG преодолява недостатъците на JUnit и е проектиран да прави тестване от край до край лесно.
Използването на TestNG, можете да генерирате подходящ отчет и лесно можете да разберете колко тестови случая са преминали, неуспешни и пропуснати. Можете да изпълните неуспешните тестови случаи отделно.
Какво е Junit?
JUnit е единица с отворен код Тестване Рамка за JAVA. Полезен е за Java Разработчиците да пишат и изпълняват повтарящи се тестове. Ерих Гама и Кент Бек първоначално го разработват. Това е екземпляр на xUnit архитектура. Както подсказва името, той се използва за Единично тестване от малка част от кода.
Разработчиците, които следват методология, управлявана от тестове, трябва първо да напишат и изпълнят модулен тест преди всеки код.
След като приключите с кода, трябва да изпълните всички тестове и той трябва да премине. Всеки път, когато се добавя някакъв код, трябва да изпълните отново всички тестови случаи и да се уверите, че нищо не е счупено.
разлики между JUnit намлява TestNG
И двете TestNG намлява JUnit4 изглежда подобно, с изключение на една или две характеристики. Нека направим сравнение между двете, за да решим бързо коя технология е по-благоприятна за Unit Testing. Таблицата по-долу подчертава функциите, поддържани и от двете:
Анотации
И двете JUnit намлява TestNG използва анотации и почти всички анотации изглеждат подобно.
TestNG използва @BeforeMethod ,@AfterMethod подобно на @Before ,@After в JUnit4.
И двете TestNG и Junit4 използва @Test(timeout = 1000) за изчакване. Проверете таблицата по-долу за повече подробности-
| SNA | Descriptйон | TestNG | JUnit 4 |
|---|---|---|---|
| 1 | Тестова анотация | @Тест | @Тест |
| 2 | Изпълнява се преди първия тестов метод да бъде извикан в текущия клас | @BeforeClass | @BeforeClass |
| 3 | Изпълнява се след всички тестови методи в текущия клас | @След часовете | @След часовете |
| 4 | Изпълнява се преди всеки тестов метод | @BeforeMethod | @Преди |
| 5 | Изпълнява се след всеки тестов метод | @AfterMethod | @След |
| 6 | анотация за игнориране на тест | @Test(enable=false) | @ignore |
| 7 | анотация за изключение | @Test(expectedExceptions = ArithmeticException.class) | @Test(очаква се = ArithmeticException.class) |
| 8 | изчакване | @Test(време за изчакване = 1000) | @Test(време за изчакване = 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 Test
Пакетите се използват за изпълнение на множество тестове заедно. Пакетите могат да бъдат създадени с помощта на двете TestNG намлява JUnit4. Въпреки това, апартаментите са по-мощни в TestNG тъй като използва много различен метод за изпълнение на тестове. Нека го разберем с помощта на кодов фрагмент, както е дадено по-долу:
Използването на JUnit4
Класът по-долу описва използването на пакета при работа с JUnit4:
package guru99.junit;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
SuiteTest1.class,
SuiteTest2.class,
})
public class JunitTest {
// This class remains empty,it is used only as a holder for the above annotations
}
Използването на TestNG
TestNG използва xml за групиране на всички тестове на едно място. По-долу xml описва използването на пакета при работа с TestNG:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My test suite"> <test name="testing"> <classes> <class name="com.guru99.SuiteTest1" /> <class name="com.guru99.SuiteTest2" /> </classes> </test> </suite>
Игнорирайте теста
Използвайки и двете, можем да пропуснем тест. Нека го видим, като използваме примерен код, както е даден по-долу:
Използването на JUnit4
Кодовият фрагмент по-долу описва използването на @ignore анотация по време на работа JUnit4:
@Ignore
public void method1()
{
System.out.println("Using @Ignore , this execution is ignored");
}
Използването на TestNG
Кодовият фрагмент по-долу описва използването на анотация @Test(enabled=false) при работа с TestNG:
@Test(enabled=false)
public void TestWithException()
{
System.out.println("Method should be ignored as it's not ready yet");
}
Тест за изключение
Тестването по изключение е налично както в TestNG намлява JUnit4. Използва се за проверка, кое изключение се хвърля от теста?
Използването на JUnit4
Кодовият фрагмент по-долу описва използването на тест за изключение при работа с JUnit4:
@Test(expected = ArithmeticException.class)
public void divideByZero()
{
Int i = 1/0;
}
Използването на TestNG
Кодовият фрагмент по-долу описва използването на тест за изключение при работа с TestNG:
@Test(expectedExceptions = ArithmeticException.class)
public void divideByZero()
{
Int i = 1/0;
}
Timeout
Тази функция е реализирана както в TestNg, така и в JUnit4. Времето за изчакване се използва за прекратяване на тест, който отнема повече от определеното време (в милисекунди).
Използването на JUnit4
Кодовият фрагмент по-долу описва използването на тест за изчакване при работа с JUnit4:
@Test(timeout = 1000)
public void method1()
{
while (true);
}
Използването на TestNG
Кодовият фрагмент по-долу описва използването на тест за изчакване при работа с TestNG:
@Test(timeOut = 1000)
public void method1()
{
while (true);
}
Параметризиран тест
JUnit предоставя по-лесен и разбираем подход за тестване, известен като параметризиран тест. И двете TestNG намлява JUnit поддържат параметризиран тест, но се различават по начина, по който дефинират стойността на параметъра. Нека видим това едно по едно.
Използването на JUnit4
Анотациите „@RunWith“ и „@Parameter“ се използват за предоставяне на стойност на параметър за единичния тест. Анотацията @Parameters трябва да върне List[]. Този параметър ще бъде предаден в конструктора на класа като аргумент.
@RunWith(value = Parameterized.class)
public class JunitTest{
privateint number;
public JunitTest6(int number)
{
this.number = number;
}
@Parameters
public static Collection<Object[]> data()
{
Object[][] data = new Object[][] { { 1 }, { 2 }, { 3 }, { 4 } };
returnArrays.asList(data);
}
@Test
public void parameterTest()
{
System.out.println("Parameterized Number is : " + number);
}
}
Използването на TestNG
In TestNG, XML файл или „@DataProvider“ се използва за предоставяне на параметър за тестване.
Тук анотацията @Parameters, декларирана в метода, се нуждае от параметър за тестване. Данните, използвани като параметър, ще предоставят в TestNGXML конфигурационните файлове на. Правейки това, можем да използваме повторно единичен Тестов случай с различни набори от данни и можем да получим различни резултати.
public class Test1 {
@Test
@Parameters(value="number")
public void parameterTest(int number)
{
System.out.println("Parameterized Number is : " + number);
}
}
Вижте по-долу xml файл, който да се използва за горния клас:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite">
<test name="testing">
<parameter name="number" value="2"/>
<classes>
<class name="com.guru99.Test1" />
</classes>
</test>
</suite>
Oбобщение
Видяхме JUnit4 и TestNG сравнение в детайли. Също така видяхме, че и двата са подобни, с изключение на параметризирания тест и теста за зависимост. Накратко можем да кажем, че въз основа на гъвкавостта и изискванията можем да изберем всеки един от тях за тестване на единици.

