TestNG vs JUnit – Forskjellen mellom dem
Nøkkelforskjell mellom TestNG og JUnit
- TestNG er en Java-basert rammeverk, mens JUnit er en åpen kildekode Unit Testing Framework for JAVA.
- Sammenligning TestNG Vs JUnit, TestNG merknader er lettere å bruke og forstå enn JUnit.
- TestNG lar oss lage parallelle tester, mens JUnit støtter ikke kjøring av parallelle tester.
- In TestNG, Testtilfeller kan grupperes sammen, mens i JUnit, Det er ikke mulig å gruppere tester.
Hva er TestNG?
TestNG er et rammeverk for automatiseringstesting der NG står for "Next Generation". TestNG er inspirert av JUnit som bruker merknadene (@). TestNG overvinner ulempene med JUnit og er designet for å lage ende-til-ende testing enkelt.
Ved hjelp av TestNG, kan du generere en skikkelig rapport, og du kan enkelt finne ut hvor mange testtilfeller som er bestått, ikke bestått og hoppet over. Du kan utføre de mislykkede testsakene separat.
Hva er Junit?
JUnit er en åpen kildekode-enhet Testing Rammeverk for JAVA. Det er nyttig for Java Utviklere til å skrive og kjøre repeterbare tester. Erich Gamma og Kent Beck utvikler den først. Det er en forekomst av xUnit-arkitektur. Som navnet tilsier, brukes det til Enhetstesting av en liten kodebit.
Utviklere som følger testdrevet metodikk må skrive og utføre enhetstest først før eventuell kode.
Når du er ferdig med kode, bør du utføre alle testene, og den skal bestå. Hver gang en kode legges til, må du kjøre alle testtilfeller på nytt og sørge for at ingenting er ødelagt.
Forskjeller mellom JUnit og TestNG
Begge TestNG og JUnit4 ser lik ut, bortsett fra en eller to funksjoner. La oss ta en sammenligning mellom de to for raskt å bestemme hvilken teknologi som er mer gunstig for enhetstesting. Tabellen nedenfor fremhever funksjonene som støttes av begge:
Merknader
Begge JUnit og TestNG bruker merknader og nesten alle merknadene ser like ut.
TestNG bruker @BeforeMethod ,@AfterMethod som ligner på @Before ,@After i JUnit4.
Begge TestNG og Junit4 bruker @Test(timeout = 1000) for timeout. Sjekk tabellen nedenfor for flere detaljer-
SNA | Description | TestNG | JUnit 4 |
---|---|---|---|
1 | Testkommentar | @Test | @Test |
2 | Utføres før den første testmetoden påkalles i gjeldende klasse | @BeforeClass | @BeforeClass |
3 | Utfører etter alle testmetodene i gjeldende klasse | @Etter timen | @Etter timen |
4 | Utføres før hver testmetode | @BeforeMethod | @Før |
5 | Utføres etter hver testmetode | @AfterMethod | @Etter |
6 | merknad for å ignorere en test | @Test(enable=false) | @overse |
7 | merknad for unntak | @Test(expectedExceptions = ArithmeticException.class) | @Test(expected = ArithmeticException.class) |
8 | timeout | @Test(tidsavbrudd = 1000) | @Test(tidsavbrudd = 1000) |
9 | Utføres før alle tester i suiten | @BeforeSuite | n / a |
10 | Utføres etter alle tester i suiten | @AfterSuite | n / a |
11 | Utføres før en test kjøres | @FørTest | n / a |
12 | Utføres etter en testkjøring | @Ettertest | n / a |
13 | Utføres før den første testmetoden som tilhører noen av disse gruppene påkalles | @BeforeGroups | n / a |
14 | kjør etter den siste testmetoden som tilhører noen av gruppene her | @AfterGroups | n / a |
Suite Test
Suiter brukes til å utføre flere tester sammen. Suiter kan lages ved å bruke begge TestNG og JUnit4. Suiter er imidlertid kraftigere i TestNG ettersom den bruker svært forskjellige metoder for utførelse av tester. La oss forstå det ved å bruke kodebiten som gitt nedenfor:
Ved hjelp av JUnit4
Klassen nedenfor beskriver bruk av suite mens du arbeider med 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 }
Ved hjelp av TestNG
TestNG bruker xml for å samle alle tester på ett sted. Nedenfor beskriver xml bruk av suite mens du arbeider med 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>
Ignorer testen
Ved å bruke begge kan vi hoppe over en test. La oss se den ved å bruke kodeeksempel som gitt nedenfor:
Ved hjelp av JUnit4
Kodebiten nedenfor beskriver bruken av @ignore-kommentaren mens du arbeider med JUnit4:
@Ignore public void method1() { System.out.println("Using @Ignore , this execution is ignored"); }
Ved hjelp av TestNG
Kodebiten nedenfor beskriver bruken av @Test(enabled=false)-annotering mens du arbeider med TestNG:
@Test(enabled=false) public void TestWithException() { System.out.println("Method should be ignored as it's not ready yet"); }
Unntakstest
Unntakstesting er tilgjengelig både i TestNG og JUnit4. Den brukes til å sjekke, hvilket unntak er kastet fra testen?
Ved hjelp av JUnit4
Nedenfor beskriver kodebiten bruken av unntakstest mens du arbeider med JUnit4:
@Test(expected = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
Ved hjelp av TestNG
Nedenfor beskriver kodebiten bruken av unntakstest mens du arbeider med TestNG:
@Test(expectedExceptions = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
Timeout
Denne funksjonen er implementert både i TestNg og JUnit4.Timeout brukes til å avslutte en test som tar lengre tid enn spesifisert tid (i millisekunder).
Ved hjelp av JUnit4
Nedenfor beskriver kodebiten bruk av timeout-test mens du arbeider med JUnit4:
@Test(timeout = 1000) public void method1() { while (true); }
Ved hjelp av TestNG
Nedenfor beskriver kodebiten bruk av timeout-test mens du arbeider med TestNG:
@Test(timeOut = 1000) public void method1() { while (true); }
Parameterisert test
JUnit gir en enklere og lesbar tilnærming til test kjent som Parameterisert test. Både TestNG og JUnit støtter parameterisert test, men varierer i måten de definerer parameterverdien på. La se dette en etter en.
Ved hjelp av JUnit4
"@RunWith" og "@Parameter"-kommentarene brukes til å gi parameterverdier for enhetstesten. Merknaden @Parameters må returnere List[] . Denne parameteren vil bli sendt inn i klassekonstruktøren som et 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); } }
Ved hjelp av TestNG
In TestNG, XML-fil eller "@DataProvider" brukes til å gi en parameter for testing.
Her trenger @Parameters-kommentaren deklarert i metoden en parameter for testing. Dataene som brukes som parameter vil gi inn TestNG's XML-konfigurasjonsfiler. Ved å gjøre dette kan vi gjenbruke en singel Testsak med ulike datasett, og vi kan få ulike resultater.
public class Test1 { @Test @Parameters(value="number") public void parameterTest(int number) { System.out.println("Parameterized Number is : " + number); } }
Se nedenfor xml-fil som skal brukes for klassen ovenfor:
<!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>
Oppsummering
Vi så JUnit4 og TestNG sammenligning i detaljer. Vi så også at begge er like bortsett fra parameterisert test og avhengighetstest. Kort sagt kan vi si, basert på fleksibilitet og krav kan vi velge hvilken som helst av dem for enhetstesting.