TestNG versus JUnit: wat is het verschil?

Inhoudsopgave:

Anonim

Zowel Testng als Junit zijn testraamwerken die worden gebruikt voor het testen van eenheden. TestNG is vergelijkbaar met JUnit. Er zijn maar weinig functionaliteiten aan toegevoegd die TestNG krachtiger maken dan JUnit.

Deze tutorial is voornamelijk gericht op het analyseren van functies van JUnit en TestNG. Het helpt ontwikkelaars om te beslissen welk framework moet worden gebruikt voor Unit Testing. Laten we eerst de overeenkomsten tussen TestNG en JUnit4 analyseren.

TestNG is een testraamwerk geïnspireerd door JUnit en NUnit.

Hier is de tabel met de functies die worden ondersteund door JUnit en TestNG.

Vergelijking van JUnit4 en TestNG-functies

Zowel TestNG als JUnit4 zien er hetzelfde uit, behalve een of twee functies. Laten we een vergelijking maken tussen de twee om snel te beslissen welke technologie gunstiger is voor Unit Testing. De onderstaande tabel geeft de functies weer die door beide worden ondersteund:

Annotaties

Zowel JUnit als TestNG gebruiken annotaties en bijna alle annotaties zien er hetzelfde uit.

TestNG gebruikt @BeforeMethod, @ AfterMethod vergelijkbaar met @Before, @ After in JUnit4.

Zowel TestNG als Junit4 gebruiken @Test (time-out = 1000) voor time-out.Controleer de onderstaande tabel voor meer details-

SN Omschrijving TestNG JUnit 4
1 Test annotatie @Test @Test
2 Wordt uitgevoerd voordat de eerste testmethode wordt aangeroepen in de huidige klasse @Voor klas @Voor klas
3 Wordt uitgevoerd na alle testmethoden in de huidige klasse @Na de les @Na de les
4 Wordt uitgevoerd vóór elke testmethode @WillemII @Voordat
5 Wordt uitgevoerd na elke testmethode @AfterMethod @Na
6 annotatie om een ​​test te negeren @Test (inschakelen = false) @negeren
7 annotatie voor uitzondering @Test (verwachtExceptions = ArithmeticException.class) @Test (verwacht = ArithmeticException.class)
8 time-out @Test (time-out = 1000) @Test (time-out = 1000)
9 Wordt uitgevoerd vóór alle tests in de suite @BeforeSuite nvt
10 Voert na alle tests uit in de suite @AfterSuite nvt
11 Wordt uitgevoerd voordat een test wordt uitgevoerd @BeforeTest nvt
12 Wordt uitgevoerd nadat een test is uitgevoerd @AfterTest nvt
13 Wordt uitgevoerd voordat de eerste testmethode wordt aangeroepen die bij een van deze groepen hoort @WillemII nvt
14 uitvoeren na de laatste testmethode die tot een van de groepen hier behoort @AfterGroups nvt

Suite-test

Suites worden gebruikt om meerdere tests samen uit te voeren. Suites kunnen worden gemaakt met zowel TestNG als JUnit4. Suites zijn echter krachtiger in TestNG omdat het een heel andere methode gebruikt voor het uitvoeren van tests. Laten we het begrijpen met behulp van het codefragment zoals hieronder weergegeven:

JUnit4 gebruiken

Onderstaande klasse beschrijft het gebruik van suite tijdens het werken met JUnit4:

pakket guru99.junit;importeer org.junit.runner.RunWith;importeer org.junit.runners.Suite;@RunWith (Suite.class)@ Suite.SuiteClasses ({SuiteTest1. Klasse,SuiteTest2.-klasse,​openbare klasse JunitTest {// Deze klasse blijft leeg, deze wordt alleen gebruikt als houder voor de bovenstaande annotaties​

TestNG gebruiken

TestNG gebruikt xml om alle tests op één plaats te bundelen. Xml hieronder beschrijft het gebruik van suite tijdens het werken met TestNG:

Negeer de test

Als we beide gebruiken, kunnen we een test overslaan. Laten we het bekijken met behulp van het codevoorbeeld zoals hieronder weergegeven:

JUnit4 gebruiken

Onderstaand codefragment beschrijft het gebruik van @ignore annotatie tijdens het werken met JUnit4:

@Negerenopenbare ongeldige methode1 ()​System.out.println ("Met @Ignore wordt deze uitvoering genegeerd");​

TestNG gebruiken

Onderstaand codefragment beschrijft het gebruik van @Test (enabled = false) annotatie tijdens het werken met TestNG:

@Test (ingeschakeld = false)openbare ongeldige TestWithException ()​System.out.println ("Methode moet worden genegeerd aangezien deze nog niet klaar is");​

Uitzonderingstest

Uitzonderingstests zijn beschikbaar in zowel TestNG als JUnit4. Het wordt gebruikt om te controleren, welke uitzondering wordt uit de test gegenereerd?

JUnit4 gebruiken

Onderstaand codefragment beschrijft het gebruik van een uitzonderingstest tijdens het werken met JUnit4:

@Test (verwacht = ArithmeticException.class)openbare leegte divideByZero ()​Int i = 1/0;​

TestNG gebruiken

Onderstaand codefragment beschrijft het gebruik van een uitzonderingstest tijdens het werken met TestNG:

@Test (verwachtExceptions = ArithmeticException.class)openbare leegte divideByZero ()​Int i = 1/0;​

Time-out

Deze functie is zowel in TestNg als in JUnit4 geïmplementeerd. Timeout wordt gebruikt om een ​​test te beëindigen die langer duurt dan de opgegeven tijd (in milliseconden).

JUnit4 gebruiken

Onderstaand codefragment beschrijft het gebruik van de time-outtest tijdens het werken met JUnit4:

@Test (time-out = 1000)openbare ongeldige methode1 ()​while (true);​

TestNG gebruiken

Onderstaand codefragment beschrijft het gebruik van een time-outtest tijdens het werken met TestNG:

@Test (timeOut = 1000)openbare ongeldige methode1 ()​while (true);​

Geparametriseerde test

JUnit biedt een eenvoudigere en leesbare testmethode die bekend staat als geparametriseerde test. Zowel TestNG als JUnit ondersteunen geparametriseerde test, maar verschillen in de manier waarop ze de parameterwaarde definiëren. Laten we dit een voor een bekijken.

JUnit4 gebruiken

De annotaties "@RunWith" en "@Parameter" worden gebruikt om de parameterwaarde voor de unit-test op te geven. De annotatie @Parameters moet Lijst [] teruggeven. Deze parameter wordt als argument aan de klassenconstructor doorgegeven.

@RunWith (waarde = Parameterized.class)openbare klasse JunitTest {privateint nummer;openbare JunitTest6 (int nummer)​this.number = nummer;​@Parametersopenbare statische verzameling  gegevens ()​Object [] [] data = nieuw object [] [] {{1}, {2}, {3}, {4}};returnArrays.asList (gegevens);​@Testopenbare ongeldige parameterTest ()​System.out.println ("Parameterized Number is: + number);​​

TestNG gebruiken

In TestNG wordt een XML-bestand of "@DataProvider" gebruikt om een ​​parameter voor testen op te geven.

Hier @Parameters annotatie gedeclareerd in de methode, heeft een parameter nodig om te testen. De gegevens die als parameter worden gebruikt, worden geleverd in de XML-configuratiebestanden van TestNG. Door dit te doen, kunnen we een enkele testcase met verschillende datasets hergebruiken en kunnen we verschillende resultaten krijgen.

openbare klasse Test1 {@Test@Parameters (waarde = "nummer")public void parameterTest (int nummer)​System.out.println ("Parameterized Number is: + number);​​

Zie het onderstaande xml-bestand dat voor bovenstaande klasse moet worden gebruikt:


Overzicht :

We zagen JUnit4 en TestNG-vergelijking in details. We hebben ook gezien dat beide vergelijkbaar zijn, behalve de geparametriseerde test en afhankelijkheidstest. In het kort kunnen we zeggen, op basis van flexibiliteit en vereiste kunnen we een van hen kiezen voor Unit Testing.