TestNG vs JUnit – Diferența dintre ei

Diferența cheie între TestNG și JUnit

  • TestNG este Java-cadru bazat pe, în timp ce JUnit este un cadru de testare unitar open-source pentru JAVA.
  • Comparând TestNG Vs JUnit, TestNG adnotările sunt mai ușor de utilizat și de înțeles decât JUnit.
  • TestNG ne permite să creăm teste paralele, în timp ce JUnit nu acceptă rularea de teste paralele.
  • In TestNG, Cazurile de testare pot fi grupate împreună, în timp ce sunt în JUnit, Gruparea testelor împreună nu este posibilă.
TestNG vs JUnit
TestNG vs JUnit

Ce Este TestNG?

TestNG este un cadru de testare de automatizare în care NG înseamnă „Next Generation”. TestNG este inspirat de JUnit care folosește adnotările (@). TestNG depăşeşte dezavantajele JUnit și este conceput pentru a face testarea end-to-end ușor.

Utilizarea TestNG, puteți genera un raport adecvat și puteți afla cu ușurință câte cazuri de testare au fost trecute, eșuate și ignorate. Puteți executa cazurile de testare eșuate separat.

Ce este Junit?

JUnit este o unitate open source Testarea Framework pentru JAVA. Este util pentru Java Dezvoltatorii să scrie și să ruleze teste repetabile. Erich Gamma și Kent Beck îl dezvoltă inițial. Este o instanță a arhitecturii xUnit. După cum sugerează și numele, este folosit pentru Testarea unității a unei mici bucăți de cod.

Dezvoltatorii care urmează metodologia bazată pe teste trebuie să scrie și să execute testul unitar mai întâi înainte de orice cod.

Odată ce ați terminat cu codul, ar trebui să executați toate testele și ar trebui să treacă. De fiecare dată când se adaugă orice cod, trebuie să reexecuți toate cazurile de testare și să te asiguri că nimic nu este rupt.

Diferențele dintre JUnit și TestNG

Ambele TestNG și JUnit4 arată similar, cu excepția uneia sau a două caracteristici. Să facem o comparație între cele două pentru a decide rapid care tehnologie este mai favorabilă pentru Unit Testing. Tabelul de mai jos evidențiază caracteristicile acceptate de ambele:

Diferențele dintre JUnit și TestNG

Adnotări

Ambele JUnit și TestNG folosește adnotări și aproape toate adnotările arată similar.

TestNG folosește @BeforeMethod ,@AfterMethod similar cu @Before ,@After în JUnit4.

Ambele TestNG iar Junit4 folosește @Test (timeout = 1000) pentru timeout. Consultați tabelul de mai jos pentru mai multe detalii -

SN Descriere TestNG JUnit 4
1 Adnotare de testare @Test @Test
2 Se execută înainte ca prima metodă de testare să fie invocată în clasa curentă @Înainte de curs @Înainte de curs
3 Execută după toate metodele de testare din clasa curentă @După clasa @După clasa
4 Se execută înainte de fiecare metodă de testare @BeforeMethod @Inainte de
5 Se execută după fiecare metodă de testare @AfterMethod @După
6 adnotare pentru a ignora un test @Test (activare=fals) @ignora
7 adnotare pentru excepție @Test(expectedExceptions = ArithmeticException.class) @Test(așteptată = ArithmeticException.class)
8 timeout @Test(timeout = 1000) @Test(timeout = 1000)
9 Se execută înainte de toate testele din suită @BeforeSuite N / A
10 Se execută după toate testele din suită @AfterSuite N / A
11 Se execută înainte de rularea unui test @BeforeTest N / A
12 Se execută după rularea unui test @AfterTest N / A
13 Se execută înainte de invocarea primei metode de testare care aparține oricăruia dintre aceste grupuri @BeforeGroups N / A
14 rulați după ultima metodă de testare care aparține oricăruia dintre grupurile de aici @AfterGroups N / A

Test de suită

Suitele sunt folosite pentru a executa mai multe teste împreună. Suitele pot fi create folosind ambele TestNG și JUnit4. Cu toate acestea, apartamentele sunt mai puternice în TestNG deoarece utilizează metode foarte diferite pentru executarea testelor. Să-l înțelegem folosind fragmentul de cod, așa cum este prezentat mai jos:

Utilizarea JUnit4

Clasa de mai jos descrie utilizarea suitei în timp ce lucrați cu 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		
}

Utilizarea TestNG

TestNG folosește xml pentru a grupa toate testele într-un singur loc. Mai jos xml descrie utilizarea suitei în timpul lucrului cu 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>

Ignora testul

Folosind ambele, putem sări peste un test. Să-l vedem folosind un exemplu de cod, așa cum este prezentat mai jos:

Utilizarea JUnit4

Fragmentul de cod de mai jos descrie utilizarea adnotării @ignore în timpul lucrului cu JUnit4:

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

Utilizarea TestNG

Fragmentul de cod de mai jos descrie utilizarea adnotării @Test(enabled=false) în timpul lucrului cu TestNG:

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

Test de excepție

Testarea excepțiilor este disponibilă atât în TestNG și JUnit4. Se folosește pentru a verifica, care excepție este aruncată din test?

Utilizarea JUnit4

Fragmentul de cod de mai jos descrie utilizarea testului de excepție în timpul lucrului cu JUnit4:

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

Utilizarea TestNG

Fragmentul de cod de mai jos descrie utilizarea testului de excepție în timpul lucrului cu TestNG:

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

Pauză

Această caracteristică este implementată atât în ​​TestNg, cât și în JUnit4.Timeout este folosit pentru a termina un test care durează mai mult decât timpul specificat (în milisecunde).

Utilizarea JUnit4

Fragmentul de cod de mai jos descrie utilizarea testului de expirare în timpul lucrului cu JUnit4:

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

Utilizarea TestNG

Fragmentul de cod de mai jos descrie utilizarea testului de expirare în timpul lucrului cu TestNG:

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

Test parametrizat

JUnit oferă o abordare mai ușoară și lizibilă a testului cunoscută sub numele de test parametrizat. Ambii TestNG și JUnit acceptă testul parametrizat, dar diferă în modul în care definesc valoarea parametrului. Să vedem asta unul câte unul.

Utilizarea JUnit4

Adnotările „@RunWith” și „@Parameter” sunt folosite pentru a furniza valoarea parametrului pentru testul unitar. Adnotarea @Parameters trebuie să returneze List[] . Acest parametru va fi trecut în constructorul clasei ca 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);
     }
}

Utilizarea TestNG

In TestNG, fișier XML sau „@DataProvider” este folosit pentru a furniza un parametru pentru testare.

Aici adnotarea @Parameters declarată în metodă, are nevoie de un parametru pentru testare. Datele utilizate ca parametru vor furniza în TestNGfișierele de configurare XML ale lui. Făcând acest lucru, putem reutiliza unul singur Caz de testare cu seturi de date diferite și putem obține rezultate diferite.

public class Test1 {

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

Vedeți mai jos fișierul xml pentru a fi folosit pentru clasa de mai sus:

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

Rezumat

Noi am văzut JUnit4 și TestNG comparatie in detalii. De asemenea, am văzut că ambele sunt similare, cu excepția testului parametrizat și a testului de dependență. Pe scurt, putem spune că, pe baza flexibilității și cerințelor, putem alege oricare dintre ele pentru Testarea unitară.