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.

