TestNG vs JUnit – Різниця між ними

Ключова різниця між TestNG та JUnit

  • TestNG це Javaна базі рамки, в той час як JUnit це фреймворк модульного тестування з відкритим кодом для JAVA.
  • Порівняння TestNG Vs JUnit, TestNG анотаціями легше користуватися та розуміти, ніж JUnit.
  • TestNG дозволяє нам створювати паралельні тести, тоді як JUnit не підтримує виконання паралельних тестів.
  • In TestNG, Тестові приклади можна згрупувати разом, перебуваючи в JUnit, Групувати тести неможливо.
TestNG vs JUnit
TestNG vs JUnit

Що таке TestNG?

TestNG це платформа автоматизованого тестування, у якій NG означає «Наступне покоління». TestNG натхненний JUnit який використовує анотації (@). TestNG долає недоліки JUnit і призначений для створення наскрізне тестування легко.

використання TestNG, ви можете створити належний звіт і легко дізнатися, скільки тестів пройдено, невдало та пропущено. Ви можете виконати невдалі тести окремо.

Що таке Junit?

JUnit є відкритим вихідним кодом Тестування Фреймворк для JAVA. Це корисно для Java Розробники для написання та запуску повторюваних тестів. Його спочатку розробили Еріх Гамма та Кент Бек. Це екземпляр архітектури xUnit. Як випливає з назви, він використовується для Unit Testing невеликої частини коду.

Розробники, які дотримуються методології тестування, повинні спочатку написати та виконати модульний тест перед будь-яким кодом.

Після завершення роботи з кодом ви повинні виконати всі тести, і він пройде. Кожного разу, коли додається будь-який код, вам потрібно повторно виконати всі тести та переконатися, що нічого не порушено.

Відмінності між ними JUnit та TestNG

обидві TestNG та JUnit4 виглядає схожим, за винятком однієї чи двох особливостей. Давайте порівняємо їх, щоб швидко вирішити, яка технологія є більш сприятливою для модульного тестування. У таблиці нижче висвітлено функції, які підтримують обидва:

Відмінності між ними JUnit та  TestNG

Анотації

обидві JUnit та TestNG використовує анотації, і майже всі анотації виглядають подібно.

TestNG використовує @BeforeMethod ,@AfterMethod подібно до @Before ,@After у JUnit4.

обидві TestNG а Junit4 використовує @Test(timeout = 1000) для тайм-ауту. Перевірте таблицю нижче, щоб дізнатися більше.

SNA Опис 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 н /д
10 Виконується після всіх тестів у пакеті @AfterSuite н /д
11 Виконується перед виконанням тесту @BeforeTest н /д
12 Виконується після тестового запуску @AfterTest н /д
13 Виконується перед викликом першого тестового методу, який належить до будь-якої з цих груп @BeforeGroups н /д
14 запускати після останнього тестового методу, який належить до будь-якої з груп тут @AfterGroups н /д

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;
}	

Тайм-аут

Ця функція реалізована як у 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, оголошена в методі, потребує параметра для тестування. Дані, які використовуються як параметр, будуть надані в TestNGФайли конфігурації XML. Роблячи це, ми можемо повторно використовувати один Тестовий випадок з різними наборами даних, і ми можемо отримати різні результати.

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>

Підсумки

Ми бачили JUnit4 і TestNG порівняння в деталях. Ми також побачили, що обидва подібні, за винятком параметризованого тесту та тесту залежностей. Коротше кажучи, можна сказати, що на основі гнучкості та вимог ми можемо вибрати будь-який із них для модульного тестування.