TestNG vs JUnit – Разлика между тях

Ключова разлика между TestNG намлява JUnit

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

Какво е TestNG?

TestNG е рамка за автоматизирано тестване, в която NG означава „следващо поколение“. TestNG е вдъхновен от JUnit който използва анотациите (@). TestNG преодолява недостатъците на JUnit и е проектиран да прави тестване от край до край лесно.

Използването на TestNG, можете да генерирате подходящ отчет и лесно можете да разберете колко тестови случая са преминали, неуспешни и пропуснати. Можете да изпълните неуспешните тестови случаи отделно.

Какво е Junit?

JUnit е единица с отворен код Тестване Рамка за JAVA. Полезен е за Java Разработчиците да пишат и изпълняват повтарящи се тестове. Ерих Гама и Кент Бек първоначално го разработват. Това е екземпляр на xUnit архитектура. Както подсказва името, той се използва за Единично тестване от малка част от кода.

Разработчиците, които следват методология, управлявана от тестове, трябва първо да напишат и изпълнят модулен тест преди всеки код.

След като приключите с кода, трябва да изпълните всички тестове и той трябва да премине. Всеки път, когато се добавя някакъв код, трябва да изпълните отново всички тестови случаи и да се уверите, че нищо не е счупено.

разлики между JUnit намлява TestNG

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

разлики между JUnit намлява TestNG

Анотации

И двете 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 сравнение в детайли. Също така видяхме, че и двата са подобни, с изключение на параметризирания тест и теста за зависимост. Накратко можем да кажем, че въз основа на гъвкавостта и изискванията можем да изберем всеки един от тях за тестване на единици.

Обобщете тази публикация с: