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.

Š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:
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.