TestNG vs JUnit – Razlika među njima

Ključna razlika između TestNG i JUnit

  • TestNG je Java-temeljen okvir, dok JUnit je open-source Unit Testing Framework za JAVA.
  • Uspoređujući TestNG Vs JUnit, TestNG napomene su lakše za korištenje i razumijevanje od JUnit.
  • TestNG omogućuje nam stvaranje paralelnih testova, dok JUnit ne podržava pokretanje paralelnih testova.
  • In TestNG, Slučajevi ispitivanja mogu se grupirati zajedno, dok su u JUnit, Grupiranje testova zajedno nije moguće.
TestNG vs JUnit
TestNG vs JUnit

Što je TestNG?

TestNG je okvir za automatizirano testiranje u kojem NG označava "sljedeću generaciju". TestNG nadahnut je JUnit koji koristi oznake (@). TestNG prevladava nedostatke JUnit i dizajniran je za izradu end-to-end testiranje lako.

Korištenje TestNG, možete generirati odgovarajuće izvješće i lako možete saznati koliko je testnih slučajeva prošlo, neuspješno i preskočeno. Možete zasebno izvršiti neuspjele testove.

Što je Junit?

JUnit je jedinica otvorenog koda Ispitivanje Okvir za JAVA. Koristan je za Java Programeri koji pišu i izvode ponovljive testove. Prvo su ga razvili Erich Gamma i Kent Beck. To je instanca xUnit arhitekture. Kao što naziv govori, koristi se za Ispitivanje jedinice malog dijela koda.

Programeri koji slijede metodologiju vođenu testiranjem moraju prvo napisati i izvršiti jedinični test prije bilo kakvog koda.

Nakon što završite s kodom, trebali biste izvršiti sve testove i trebao bi proći. Svaki put kada se doda bilo koji kôd, morate ponovno izvršiti sve testne slučajeve i osigurati da ništa nije pokvareno.

Razlike između JUnit i TestNG

Oboje TestNG i JUnit4 izgleda slično, osim jedne ili dvije značajke. Usporedimo to dvoje kako bismo brzo odlučili koja je tehnologija povoljnija za testiranje jedinica. Donja tablica ističe značajke koje podržavaju oba:

Razlike između JUnit i TestNG

Bilješke

Oboje JUnit i TestNG koristi bilješke i gotovo sve bilješke izgledaju slično.

TestNG koristi @BeforeMethod ,@AfterMethod slično @Before ,@After u JUnit4.

Oboje TestNG i Junit4 koristi @Test(timeout = 1000) za timeout. Više detalja potražite u tablici u nastavku-

SN Description TestNG JUnit 4
1 Anotacija testa @Test @Test
2 Izvršava se prije nego što se prva testna metoda pozove u trenutnoj klasi @Prije Klase @Prije Klase
3 Izvršava se nakon svih ispitnih metoda u trenutnoj klasi @Nakon nastave @Nakon nastave
4 Izvršava se prije svake ispitne metode @PrijeMetode @Prije
5 Izvršava se nakon svake ispitne metode @Nakon metode @Nakon
6 napomena za ignoriranje testa @Test(omogući=false) @zanemariti
7 anotacija za iznimku @Test(expectedExceptions = ArithmeticException.class) @Test(očekivano = ArithmeticException.class)
8 tajm-aut @Test(timeout = 1000) @Test(timeout = 1000)
9 Izvršava se prije svih testova u paketu @BeforeSuite n / a
10 Izvršava se nakon svih testova u paketu @AfterSuite n / a
11 Izvršava se prije pokretanja testa @Prije testa n / a
12 Izvršava se nakon izvođenja testa @AfterTest n / a
13 Izvršava se prije nego što se pozove prva testna metoda koja pripada bilo kojoj od ovih grupa @Prije Grupa n / a
14 pokrenuti nakon posljednje test metode koja pripada bilo kojoj od grupa ovdje @NakonGrupe n / a

Suite Test

Kompleti se koriste za izvođenje više testova zajedno. Kompleti se mogu kreirati koristeći oba TestNG i JUnit4. Međutim, apartmani su moćniji u TestNG jer koristi vrlo različite metode za izvođenje testova. Razumimo to pomoću isječka koda kako je navedeno u nastavku:

Korištenje JUnit4

Donja klasa opisuje korištenje paketa tijekom rada 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		
}

Korištenje TestNG

TestNG koristi xml za grupiranje svih testova na jednom mjestu. Ispod xml opisuje korištenje paketa tijekom rada s 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>

Ignoriraj test

Korištenjem oba možemo preskočiti test. Pogledajmo to pomoću primjera koda kao što je navedeno u nastavku:

Korištenje JUnit4

Donji isječak koda opisuje upotrebu oznake @ignore tijekom rada JUnit4:

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

Korištenje TestNG

Donji isječak koda opisuje upotrebu oznake @Test(enabled=false) tijekom rada s TestNG:

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

Test izuzetaka

Testiranje izuzetaka dostupno je iu TestNG i JUnit4. Koristi se za provjeru koja se iznimka izbacuje iz testa?

Korištenje JUnit4

Donji isječak koda opisuje upotrebu testa iznimke tijekom rada JUnit4:

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

Korištenje TestNG

Donji isječak koda opisuje upotrebu testa iznimke tijekom rada TestNG:

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

Tajm-aut

Ova je značajka implementirana u TestNg i JUnit4.Timeout se koristi za prekid testa koji traje duže od navedenog vremena (u milisekundama).

Korištenje JUnit4

Donji isječak koda opisuje korištenje testa vremenskog ograničenja tijekom rada s JUnit4:

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

Korištenje TestNG

Donji isječak koda opisuje korištenje testa vremenskog ograničenja tijekom rada s TestNG:

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

Parametrirani test

JUnit pruža lakši i čitljiv pristup testiranju poznat kao parametrizirani test. Oba TestNG i JUnit podržavaju parametrizirani test, ali se razlikuju po načinu na koji definiraju vrijednost parametra. Pogledajmo ovo jedno po jedno.

Korištenje JUnit4

Napomene "@RunWith" i "@Parameter" koriste se za pružanje vrijednosti parametra za jedinični test. Napomena @Parameters mora vratiti List[]. Ovaj parametar će biti proslijeđen u konstruktor klase kao 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);
     }
}

Korištenje TestNG

In TestNG, XML datoteka ili "@DataProvider" koristi se za pružanje parametra za testiranje.

Ovdje @Parameters anotacija deklarirana u metodi treba parametar za testiranje. Podaci koji se koriste kao parametar pružit će u TestNGXML konfiguracijske datoteke. Čineći to, možemo ponovno upotrijebiti singl Testni slučaj s različitim skupovima podataka i možemo dobiti različite rezultate.

public class Test1 {

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

Pogledajte ispod xml datoteku koja će se koristiti za gornju klasu:

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

Rezime

Vidjeli smo JUnit4 i TestNG usporedba u detaljima. Također smo vidjeli da su oba slična osim parametriziranog testa i testa ovisnosti. Ukratko možemo reći, na temelju fleksibilnosti i zahtjeva možemo odabrati bilo koji od njih za testiranje jedinice.