TestNG vs JUnit: Hva er forskjellen?

Innholdsfortegnelse:

Anonim

Både Testng og Junit er Testing framework brukt til Unit Testing. TestNG ligner på JUnit. Få flere funksjoner er lagt til det som gjør TestNG kraftigere enn JUnit.

Denne opplæringen er hovedsakelig fokusert på å analysere funksjonene i JUnit og TestNG. Det hjelper utviklere å bestemme hvilket rammeverk som skal brukes til enhetstesting. La oss først analysere likheter mellom TestNG og JUnit4.

TestNG er et testrammeverk inspirert av JUnit og NUnit.

Her er tabellen som viser funksjonene som støttes av JUnit og TestNG.

JUnit4 og TestNG Feature sammenligning

Både TestNG og JUnit4 ser like ut, bortsett fra en eller to funksjoner. La oss sammenligne de to for å raskt avgjøre hvilken teknologi som er gunstigere for enhetstesting. Tabellen nedenfor viser funksjonene som støttes av begge:

Kommentarer

Både JUnit og TestNG bruker merknader og nesten alle kommentarene ser like ut.

TestNG bruker @BeforeMethod, @ AfterMethod som @Before, @ After i JUnit4.

Både TestNG og Junit4 bruker @Test (timeout = 1000) for timeout. Sjekk tabellen nedenfor for mer informasjon-

SN Beskrivelse TestNG JUnit 4
1 Test kommentar @Test @Test
2 Utfører 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ører før hver testmetode @BeforeMethod @Før
5 Utføres etter hver testmetode @AfterMethod @Etter
6 kommentar for å ignorere en test @Test (aktivere = usann) @overse
7 kommentar for unntak @Test (expectExceptions = ArithmeticException.class) @Test (forventet = ArithmeticException.class)
8 pause @Test (timeout = 1000) @Test (timeout = 1000)
9 Utfører før alle tester i suiten @BeforeSuite ikke relevant
10 Utfører etter alle tester i suiten @AfterSuite ikke relevant
11 Utfører før en test kjører @BeforeTest ikke relevant
12 Utføres etter en testkjøring @AfterTest ikke relevant
1. 3 Utføres før den første testmetoden påberopes som tilhører noen av disse gruppene, blir påkalt @BeforeGroups ikke relevant
14 kjør etter den siste testmetoden som tilhører noen av gruppene her @AfterGroups ikke relevant

Suite Test

Suiter brukes til å utføre flere tester sammen. Suiter kan opprettes ved hjelp av både TestNG og JUnit4. Suitene er imidlertid kraftigere i TestNG, da det bruker veldig forskjellige metoder for utføring av tester. La oss forstå det ved hjelp av kodebit som gitt nedenfor:

Bruke JUnit4

Nedenfor klassen beskrives bruken av suite mens du arbeider med JUnit4:

pakke guru99.junit;importer org.junit.runner.RunWith;importer org.junit.runners.Suite;@RunWith (Suite.class)@ Suite.SuiteClasses ({SuiteTest1.klasse,SuiteTest2.class,})offentlig klasse JunitTest {// Denne klassen forblir tom, den brukes kun som holder for kommentarene ovenfor}

Bruke TestNG

TestNG bruker xml til å samle alle testene på ett sted. Xml nedenfor beskriver bruken av suite mens du arbeider med TestNG:

Ignorer test

Ved å bruke begge deler kan vi hoppe over en test. La oss se den ved hjelp av kodeeksempel som gitt nedenfor:

Bruke JUnit4

Nedenfor inneholder kodebiten bruk av @ignore-merknader mens du arbeider med JUnit4:

@Overseoffentlig ugyldig metode1 (){System.out.println ("Ved å bruke @Ignore blir denne kjøringen ignorert");}

Bruke TestNG

Nedenfor beskriver kodebiten bruk av @Test (aktivert = falsk) kommentar mens du arbeider med TestNG:

@Test (aktivert = usann)offentlig ugyldig TestWithException (){System.out.println ("Metoden skal ignoreres siden den ikke er klar ennå");}

Unntakstest

Unntakstesting er tilgjengelig både i TestNG og JUnit4. Den brukes til å sjekke, hvilket unntak blir kastet fra testen?

Bruke JUnit4

Nedenfor kodebiten beskriver bruken av unntakstest mens du arbeider med JUnit4:

@Test (forventet = ArithmeticException.class)offentlig tomrom divideByZero (){Int i = 1/0;}

Bruke TestNG

Nedenfor kodebiten beskriver bruken av unntakstest mens du arbeider med TestNG:

@Test (expectExceptions = ArithmeticException.class)offentlig tomrom divideByZero (){Int i = 1/0;}

Pause

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).

Bruke JUnit4

Nedenfor kodebiten beskriver bruken av timeout-testen mens du arbeider med JUnit4:

@Test (timeout = 1000)offentlig ugyldig metode1 (){mens (sant);}

Bruke TestNG

Nedenfor kodebiten beskriver bruken av timeout-testen mens du arbeider med TestNG:

@Test (timeOut = 1000)offentlig ugyldig metode1 (){mens (sant);}

Parameterisert test

JUnit gir en enklere og lesbar tilnærming til test, kjent som Parameterized test. Både TestNG og JUnit støtter parameterisert test, men er forskjellige i måten de definerer parameterverdien på. La oss se dette en etter en.

Bruke JUnit4

Merknadene "@RunWith" og "@Parameter" brukes til å gi parameterverdi for enhetstesten. Merknaden @Parameters må returnere Liste []. Denne parameteren vil bli sendt inn i klassekonstruktøren som et argument.

@RunWith (verdi = Parameterized.class)offentlig klasse JunitTest {privateint nummer;offentlig JunitTest6 (int-nummer){dette.nummer = antall;}@Parametreoffentlig statisk samling  data (){Objekt [] [] data = nytt objekt [] [] {{1}, {2}, {3}, {4}};returnArrays.asList (data);}@Testpublic void parameterTest (){System.out.println ("Parameterisert nummer er: + nummer);}}

Bruke TestNG

I TestNG brukes XML-fil eller "@DataProvider" for å gi en parameter for testing.

Her trenger @Parameters-merknader erklært i metoden en parameter for testing. Dataene som brukes som parameter vil gi i TestNGs XML-konfigurasjonsfiler. Ved å gjøre dette kan vi gjenbruke en enkelt testcase med forskjellige datasett, og vi kan få forskjellige resultater.

offentlig klasse Test1 {@Test@Parameters (verdi = "antall")public void parameterTest (int number){System.out.println ("Parameterisert nummer er: + nummer);}}

Se nedenfor xml-fil som skal brukes til ovennevnte klasse:


Sammendrag:

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.