TestNG vs JUnit – Rozdíl mezi nimi

Klíčový rozdíl mezi TestNG si JUnit

  • TestNG je Java-založený rámec, zatímco JUnit je open-source Unit Testing Framework pro JAVA.
  • Porovnání TestNG Vs JUnit, TestNG anotace jsou snadněji použitelné a pochopitelné než JUnit.
  • TestNG nám umožňuje vytvářet paralelní testy, zatímco JUnit nepodporuje spouštění paralelních testů.
  • In TestNG, Testovací případy lze seskupit, zatímco v JUnit, Seskupování testů není možné.
TestNG vs JUnit
TestNG vs JUnit

Co je to TestNG?

TestNG je rámec pro testování automatizace, ve kterém NG znamená „Next Generation“. TestNG je inspirován JUnit který používá anotace (@). TestNG překonává nevýhody JUnit a je určen k výrobě end-to-end testování snadné.

Použití TestNG, můžete vygenerovat správnou zprávu a snadno zjistíte, kolik testovacích případů prošlo, selhalo a přeskočilo. Neúspěšné testovací případy můžete spustit samostatně.

Co je Junit?

JUnit je jednotka s otevřeným zdrojovým kódem Testování Framework pro JAVA. Je to užitečné pro Java Vývojáři psát a spouštět opakovatelné testy. Erich Gamma a Kent Beck jej zpočátku vyvíjeli. Je to instance architektury xUnit. Jak název napovídá, používá se pro Testování jednotek malého kousku kódu.

Vývojáři, kteří dodržují metodologii řízenou testy, musí nejprve napsat a provést test jednotky před jakýmkoli kódem.

Jakmile skončíte s kódem, měli byste provést všechny testy a mělo by to projít. Pokaždé, když je přidán jakýkoli kód, musíte znovu spustit všechny testovací případy a ujistit se, že nic není rozbité.

Rozdíly mezi JUnit si TestNG

Oba TestNG si JUnit4 vypadá podobně, až na jednu nebo dvě funkce. Pojďme si je porovnat, abychom se rychle rozhodli, která technologie je pro Unit Testing výhodnější. Níže uvedená tabulka zdůrazňuje funkce podporované oběma:

Rozdíly mezi JUnit si TestNG

Anotace

Oba JUnit si TestNG používá anotace a téměř všechny anotace vypadají podobně.

TestNG používá @BeforeMethod ,@AfterMethod podobnou @Before ,@After in JUnit4.

Oba TestNG a Junit4 používá @Test(timeout = 1000) pro časový limit. Další podrobnosti naleznete v tabulce níže-

SNA Description TestNG JUnit 4
1 Anotace testu @Test @Test
2 Spustí se před vyvoláním první testovací metody v aktuální třídě @Před hodinou @Před hodinou
3 Spustí se po všech testovacích metodách v aktuální třídě @Po hodině @Po hodině
4 Provádí se před každou testovací metodou @BeforeMethod @Před
5 Provádí se po každé testovací metodě @AfterMethod @Po
6 anotace k ignorování testu @Test(povolit=nepravda) @ignorovat
7 anotace pro výjimku @Test(expectedExceptions = ArithmeticException.class) @Test (očekáváno = ArithmeticException.class)
8 timeout @Test(časový limit = 1000) @Test(časový limit = 1000)
9 Spustí se před všemi testy v sadě @BeforeSuite n / a
10 Spustí se po všech testech v sadě @AfterSuite n / a
11 Spustí se před testovacím spuštěním @Před testem n / a
12 Spustí se po zkušebním běhu @Po testu n / a
13 Spustí se před vyvoláním první testovací metody, která patří do kterékoli z těchto skupin @BeforeGroups n / a
14 spustit po poslední testovací metodě, která patří do některé ze zde uvedených skupin @AfterGroups n / a

Test sady

Sady se používají k provádění více testů společně. Suity lze vytvořit pomocí obou TestNG si JUnit4. Suity jsou však výkonnější v TestNG protože používá velmi odlišný způsob provádění testů. Pojďme to pochopit pomocí fragmentu kódu, jak je uvedeno níže:

Použití JUnit4

Níže uvedená třída popisuje použití sady při práci s 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		
}

Použití TestNG

TestNG používá xml ke spojení všech testů na jednom místě. Níže xml popisuje použití sady při práci 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>

Ignorovat test

Pomocí obou můžeme přeskočit test. Podívejme se na to pomocí příkladu kódu, jak je uvedeno níže:

Použití JUnit4

Níže uvedený fragment kódu popisuje použití anotace @ignore při práci s JUnit4:

@Ignore
public void method1() 
{
	System.out.println("Using @Ignore , this execution is ignored");
}

Použití TestNG

Níže uvedený fragment kódu popisuje použití anotace @Test(enabled=false) při práci s TestNG:

@Test(enabled=false)
public void TestWithException()
{  
	System.out.println("Method should be ignored as it's not ready yet");
}

Test výjimek

Testování výjimek je k dispozici v obou TestNG si JUnit4. Používá se ke kontrole, která výjimka je vyvolána z testu?

Použití JUnit4

Níže uvedený fragment kódu popisuje použití testu výjimky při práci s JUnit4:

@Test(expected = ArithmeticException.class)  
public void divideByZero() 
{  
	Int i = 1/0;
}

Použití TestNG

Níže uvedený fragment kódu popisuje použití testu výjimky při práci s TestNG:

@Test(expectedExceptions = ArithmeticException.class)  
public void divideByZero()
{  
Int i = 1/0;
}	

Timeout

Tato funkce je implementována v TestNg a JUnit4.Timeout se používá k ukončení testu, který trvá déle, než je zadaná doba (v milisekundách).

Použití JUnit4

Níže uvedený fragment kódu popisuje použití testu časového limitu při práci s JUnit4:

@Test(timeout = 1000)  
public void method1()
{  
	while (true);  
}

Použití TestNG

Níže uvedený fragment kódu popisuje použití testu časového limitu při práci s TestNG:

@Test(timeOut = 1000)  
public void method1()
{  
	while (true);  
}

Parametrizovaný test

JUnit poskytuje jednodušší a čitelnější přístup k testování známý jako parametrizovaný test. Obě TestNG si JUnit podporuje parametrizovaný test, ale liší se ve způsobu, jakým definují hodnotu parametru. Podívejme se na to jeden po druhém.

Použití JUnit4

Anotace „@RunWith“ a „@Parameter“ se používají k poskytnutí hodnoty parametru pro test jednotky. Anotace @Parameters musí vrátit List[]. Tento parametr bude předán do konstruktoru třídy jako argument.

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

Použití TestNG

In TestNG, soubor XML nebo „@DataProvider“ se používá k poskytnutí parametru pro testování.

Zde anotace @Parameters deklarovaná v metodě potřebuje parametr pro testování. Data použitá jako parametr poskytne v TestNGkonfigurační soubory XML. Tímto způsobem můžeme znovu použít singl Testovací případ s různými datovými sadami a můžeme získat různé výsledky.

public class Test1 {

    @Test
    @Parameters(value="number")
    public void parameterTest(int number)
	{
    	System.out.println("Parameterized Number is : " + number);
    }
     
}

Viz níže soubor xml, který se má použít pro výše uvedenou třídu:

<!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>

Shrnutí

Viděli jsme JUnit4 a TestNG srovnání v detailech. Také jsme viděli, že oba jsou podobné kromě parametrizovaného testu a testu závislosti. Stručně lze říci, že na základě flexibility a požadavků si můžeme vybrat kteroukoli z nich pro testování jednotek.