junit vs testng what are differences
Een uitgebreide vergelijking tussen JUnit Vs TestNG-frameworks. Bevat een vergelijking van annotaties en featuregewijze vergelijking met voorbeelden:
In de vorige tutorial leerden we DisplayName-annotatie en voorwaardelijke testuitvoering op basis van verschillende criteria, zoals JRE-versie, omgevingsvariabelen, enz. We hebben ook enkele belangrijke vragen rond het onderwerp behandeld.
Omdat we in eerdere tutorials continu over JUnit hebben geleerd, zal deze als een adempauze werken voor ons publiek, aangezien we onze focus een tijdje zullen verschuiven van JUnit als enige agenda naar de vergelijking tussen JUnit en TestNG.
Bekijk hier de perfecte JUnit-trainingsgids.
Wat je leert:
- JUnit versus TestNG: een vergelijking
- Gevolgtrekking
JUnit versus TestNG: een vergelijking
Kenmerken | JUnit | TestNG |
---|---|---|
Time-out voor tests | Ja | Ja |
Opensource-raamwerk | Ja JUnit is een opensource-framework | Ja TestNG is een opensource-framework |
Gebruikersvriendelijk | JUnit is verdeeld over verschillende modules, bijvoorbeeld: Voor parametrisering heeft u wellicht JUnit Jupiter nodig. Dit maakt JUnit enigszins omslachtig in gebruik in vergelijking met TestNG | Alle TestNG-functies komen in één module. Dit maakt TestNG gebruiksvriendelijker. |
Grote IDE-ondersteuning Voorbeeld: Eclipse, IntelliJ) | Ja Beide ondersteunen de meeste IDE gelijkelijk | Ja Beide ondersteunen de meeste IDE gelijkelijk |
Implementatie van annotaties | Ja JUnit werkt aan annotaties met kleine variaties voor verschillende functies | Ja TestNG werkt aan annotaties met kleine variaties voor verschillende functies |
Implementatie van beweringen | Ja JUnit biedt voldoende beweringen om verwachte en feitelijke resultaten te valideren, met enkele variaties op beweringen in TestNG | Ja TestNG ondersteunt ook een enorme lijst met beweringen voor vergelijking van verwachte en daadwerkelijke resultaten. Bovendien biedt TestNG twee mechanismen voor beweringen - Soft Assertion en Hard Assertion |
Uitzonderingen | Ja JUnit biedt de functie voor het testen van uitzonderingen met een kleine variatie op TestNG | Ja TestNG biedt ook de functie voor het testen van uitzonderingen |
Geparametriseerde tests | Ja JUnit ondersteunt tests met parameters | Ja TestNG ondersteunt ook geparametriseerde tests |
Test pak | Ja JUnit ondersteunt het gebruik van testsuites | Ja TestNG ondersteunt ook Test Suite. |
Afhankelijkheidstest | Niet doen JUnit ondersteunt de functie voor afhankelijkheidstests niet | Ja Dit is een geavanceerde functie in TestNG via JUnit. Met deze functie kan de ene methode afhankelijk worden gemaakt van de andere, zodat de methode alleen wordt uitgevoerd nadat de afhankelijke methode is uitgevoerd en slaagt, anders wordt de afhankelijke test niet uitgevoerd. |
Parallelle testuitvoering | Niet doen Parallelle uitvoering is niet beschikbaar in JUnit | Ja TestNG ondersteunt parallelle uitvoering van tests, maar JUnit niet. Er is een TestNG xml waar parallelle uitvoering kan worden ingesteld |
Maven-integratie | Ja Beide tools ondersteunen Maven-integratie | Ja Beide tools ondersteunen Maven-integratie |
Implementaties van veronderstellingen | Ja Veronderstellingen worden gebruikt om tests over te slaan op basis van bepaalde aannames of voorwaarden en dit is alleen van toepassing in JUnit. | Niet doen TestNG ondersteunt geen veronderstellingen |
Volgorde van testuitvoering | Ja Junit ondersteunt de volgorde van testuitvoering. | Ja TestNG ondersteunt de volgorde van testuitvoering |
Implementatie van luisteraars | Ja JUnit ondersteunt luisteraars niet via annotaties maar via Listeners API. | Ja TestNG ondersteunt luisteraars door middel van annotaties. |
Negeer tests | Ja Beide ondersteunen het uitschakelen van tests, maar JUnit ondersteunt het uitschakelen van tests voor uitvoering op basis van verschillende omstandigheden | Ja Beide ondersteunen het uitschakelen van tests |
Rapporteren | Ja JUnit moet worden geïntegreerd met maven om HTML-rapporten te genereren | Ja TestNG heeft zijn ingebouwde HTML-rapporten. Het kan ook worden geïntegreerd met maven of met externe rapportagebibliotheken zoals ATU-rapport of omvangrapporten |
Vergelijking van annotaties
TestNG en JUnit zijn beide frameworks voor het testen van eenheden uit de wereld van Java. Beide implementeren zeer nauwere en vergelijkbare functies. In deze sectie zullen we enkele overeenkomsten bekijken bij het implementeren van een aantal functies, terwijl we ook een paar andere functies zouden zien die anders geïmplementeerd zijn in JUnit en TestNG.
# 1) Annotatie van testmethode
Er is geen verschil in de manier waarop we een methode specificeren als testmethode in zowel JUnit als TestNG.
JUnit 5 | TestNG |
---|---|
@Test | @Test |
# 2) Suite-gerelateerde annotatie
- Een methode met annotatie @BeforeSuite wordt eenmaal uitgevoerd voordat de huidige testsuite wordt uitgevoerd.
- Deze annotatie is alleen van toepassing in TestNG.
JUnit 5 | TestNG |
---|---|
Niet toepasbaar | @BeforeSuite |
# 3) Annotatie voor een methode vóór Class
Dit is de annotatie voor de methode die één keer moet worden uitgevoerd voordat de eerste testmethode in de klasse wordt uitgevoerd.
JUnit 5 | TestNG |
---|---|
@Voor alles | @Voor klas |
# 4) Annotatie voor een methode vóór Test
- Deze annotatie wordt eenmaal uitgevoerd vóór de methoden die in de tag van testng.xml zijn gedeclareerd.
- Deze annotatie is alleen beschikbaar voor TestNG.
JUnit 5 | TestNG |
---|---|
Niet toepasbaar | @BeforeTest |
# 5) Annotatie voor de methode die moet worden uitgevoerd voordat elke methode met @Test wordt aangeroepen
JUnit 5 | TestNG |
---|---|
@BeforeEach | @Bekijkhet_nu |
# 6) Annotatie voor de methode die moet worden uitgevoerd na elke methode met @Test aanroepen
JUnit 5 | TestNG |
---|---|
@Na elke | @AfterMethod |
# 7) Annotatie voor methode na test
- Deze annotatie wordt eenmaal uitgevoerd na de methoden die in de tag van testng.xml zijn gedeclareerd.
- Deze annotatie is alleen beschikbaar voor TestNG.
JUnit 5 | TestNG |
---|---|
Niet toepasbaar | @AfterTest |
# 8) Annotatie voor methode na klasse
Dit is de annotatie voor de methode die eenmaal moet worden uitgevoerd nadat de laatste testmethode in de klasse is uitgevoerd.
JUnit 5 | TestNG |
---|---|
@Ten slotte | @Na de les |
# 9) Annotatie om de uitvoering van de testmethode uit te schakelen.
- JUnit 5 biedt een annotatie om een specifieke testuitvoering uit te schakelen.
- TestNG biedt een attribuut voor @Test, d.w.z. ‘ingeschakeld’ met de booleaanse waarde die beslist of de uitvoering van de methode wordt uitgeschakeld of ingeschakeld
JUnit 5 | TestNG |
---|---|
@negeren | @Test (ingeschakeld = false) |
Verwijzen naar Tutorial 7 Uitvoering overslaan om te begrijpen hoe u tests in JUnit4 versus JUnit 5 kunt uitschakelen
# 10) Annotatie van time-out
De annotatie is hetzelfde voor JUnit 5 en TestNG
JUnit 5 | TestNG |
---|---|
@Test (time-out = 2000) | @Test (time-out = 2000) |
# 11) Verwacht uitzonderingskenmerk
- Uitzonderingsklasse stelt dat wanneer de test wordt uitgevoerd, de uitzondering van de opgegeven klasse wordt gegenereerd.
- Dit wordt ondersteund in zowel JUnit als TestNG met variatie in de manier waarop beide worden gedeclareerd.
JUnit 5 | TestNG | |
---|---|---|
@Test (verwacht = NullPointerException.class) | @Test (verwachteException = NullPointerException.class) |
# 12) Suite-gerelateerde annotatie
- Een methode met annotatie @AfterSuite wordt eenmaal uitgevoerd nadat de huidige testsuite is uitgevoerd.
- Deze annotatie is alleen van toepassing in TestNG.
JUnit 5 | TestNG |
---|---|
Niet toepasbaar | @AfterSuite |
# 13) Groepgerelateerde annotatie
- De annotatie is alleen beschikbaar in TestNG.
- De methode met annotatie @BeforeGroups wordt uitgevoerd voordat de testmethoden die tot een bepaalde groep behoren, worden uitgevoerd.
JUnit 5 | TestNG | |
---|---|---|
Niet toepasbaar | @BoerLeen |
- De annotatie is alleen beschikbaar in TestNG.
- De methode met annotatie @BeforeGroups wordt uitgevoerd nadat de testmethoden die tot een bepaalde groep behoren, zijn uitgevoerd.
JUnit 5 | TestNG |
---|---|
Niet toepasbaar | @AfterGroups |
# 14) Annotaties met betrekking tot de volgorde van uitvoering
Zowel JUnit als TestNG ondersteunen het expliciet instellen van de volgorde van tests voor uitvoering. Met andere woorden, de prioriteit instellen voor testgevallen.
- JUnit 5 heeft annotatie @TestMethodOrder () met de ingebouwde klasse van het MethodOrderer-pakket - Alphanumeric.class of OrderAnnotation.class of Random.class als een invoerparameter voor de annotatie.
Verwijzen naar Tutorial 9 - Junit Test Execution Order voor meer informatie over het instellen van de testuitvoeringsvolgorde in JUnit.
- TestNG bevat het kenmerk ‘prioriteit’ voor @Test-annotatie, dat een numerieke waarde accepteert.
JUnit 5 | TestNG |
---|---|
@TestMethodOrder (Alfanumeriek.klasse) | @Test (prioriteit = 1) |
Basisprogramma voor TestNG en JUnit 4
# 1) TestNG-code
Verwachte resultaten:
# 2) JUnit 4-code
Verwachte resultaten:
JUnit 5 versus TestNG: verschil in functie met voorbeelden
# 1) Testsuite
- De testsuite is een verzameling tests, wat betekent dat we meerdere testcases uit meerdere klassen samen afronden.
- De aanpak die TestNG gebruikt suite is anders en krachtig in vergelijking met die van JUnit.
Test suite in JUnit 5
Laten we snel kijken hoe JUnit 5 de testsuite toepast.
Verwijzen naar Tutorial 8 -JUnit Test Suites & Filtering Testcases voor een beter begrip van de implementatie van de testsuite in JUnit 4 en in JUnit 5.
Test suite in TestNG
TestNG gebruikt de XML als de onderstaande sjabloon om alle logisch verbonden testklassen in te pakken
# 2) Geparametriseerde test
Zowel TestNG als JUnit maken parametrisering van tests mogelijk, wat niets anders is dan het uitvoeren van dezelfde tests met gegevensvariaties.
Geparametriseerde test in JUnit 4
Geparametriseerde test in TestNG
Er zijn twee manieren waarop u parametrisering in TestNG kunt gebruiken
- @Parameters en het passeren van TestNG XML
- Annotatie @DataProvider
a) @Parameters en het passeren van TestNG XML
XML voor hetzelfde
b) Gegevensleverancier
De DataProvider-annotatie retourneert altijd Object () (), de array met objecten.
# 3) Time-out
Als een bepaalde test niet binnen de gestelde tijd wordt voltooid, krijgt deze een time-out. In andere gevallen wordt de draad onderbroken.
hoe je een array van een methode in java retourneert
Time-out in JUnit
Er zijn verschillende benaderingen voor Timeout-implementatie in JUnit. Dit zijn:
- Gebruik de gebruikelijke time-out met specifieke milliseconden
- Time-out gebruiken met de bewering
- Globale time-out gebruiken
We zullen een gedetailleerde tutorial hebben die focust op time-out voor JUnit 4 en JUnit 5.
Hieronder ziet u het fragment dat het gebruik van de gebruikelijke time-out in JUnit 5 laat zien:
De bovenstaande test time-out na 5 seconden.
Time-out in TestNG
De TestNG gebruikt ook de eenvoudige manier van Timeout-implementatie:
# 4) Uitzonderingstest
Uitzonderingstest zorgt ervoor dat wanneer deze vooraf gedefinieerde uitzondering wordt gegenereerd, deze netjes wordt opgevangen en op de logboeken wordt vermeld.
Uitzonderingstest in JUnit 4
Er komt een aparte tutorial waarin de uitzonderingen voor JUnit 4 en 5 in detail worden behandeld.
Uitzonderingstest in TestNG
Er is een kleine wijziging in de test van de verklaring van uitzondering in TestNG:
# 5) Schakel test uit
Zowel TestNG als JUnit staat het uitschakelen van een test toe voor uitvoering.
Uitgeschakelde test in JUnit 5
@Uitgeschakelde annotatie bij gebruik aan de bovenkant van de klas, worden alle tests binnen de klas overgeslagen voor uitvoering. Als de annotatie bovenop een bepaalde @Test-methode wordt gebruikt, wordt die specifieke testcase uitgeschakeld voor uitvoering.
Uitgeschakelde test in TestNG
TestNG staat een test toe om de uitvoering van een test uit te schakelen wanneer het attribuut “enabled” van annotatie @Test is ingesteld op false en het is ingeschakeld wanneer het attribuut is ingesteld op true. Als alle tests binnen een klasse moeten worden ingeschakeld, markeer dan expliciet enabled = true voor elke @Test-methode.
Hieronder ziet u het codefragment dat het overslaan van een test aantoont.
# 6) Groepstests
Er zijn tegenstrijdige verklaringen op meerdere sites en forums waar mensen hebben vermeld dat JUnit nooit het groeperen van tests met de specifieke groepsnaam heeft ondersteund.
Annotaties @BeforeGroups en @AfterGroups komen alleen met TestNG, maar groeperen is zowel in JUnit 4 als in JUnit 5 toegestaan. Hier zullen we snel het gebruik van groepstests in JUnit 5 demonstreren. Groepstests worden in JUnit 4 en Tags genoemd. in JUnit 5.
U kunt verwijzen naar Tutorial 8 - JUnit Test Suites & Filtering Tests voor details over het gebruik in JUnit.
Groepstests in JUnit 5
Codefragment van JUnit5TestSuite.java:
De onderstaande code bevat de groep met de naam 'Regressie' en sluit de groep 'SmokeTest' uit, wat inhoudt dat junitMethod1 () zal worden uitgevoerd, maar junitMethod2 () is uitgesloten.
Groepstests in TestNG
Als het bovenstaande fragment in TestNG moet worden geïnterpreteerd, dan is hieronder de code voor hetzelfde:
TestNG XML is als volgt:
Hier worden de methoden van de regressiegroep opgenomen in de deelnemer, terwijl de rest van de groepen, inclusief SmokeTest, wordt uitgesloten.
# 7) Parallelle tests
Dit is de functie die alleen beschikbaar is bij TestNG. Meestal zijn testgevallen een soort threads die na elkaar worden aangeroepen. Als u echter op de uitvoeringstijd wilt besparen, kunt u dit in TestNG regelen door de tests in te stellen die parallel moeten worden uitgevoerd en het aantal threads op te geven dat tegelijkertijd moet worden uitgevoerd.
We zullen hier in het kort het gebruik van hangt af van methoden demonstreren en zullen niet discussiëren over afhankelijke groepen.
De afhankelijke test op een andere methode wordt als volgt ingesteld via de TestNG XML:
# 8) Afhankelijke tests
Afhankelijke tests zijn geavanceerde functies die alleen beschikbaar zijn met TestNG. De afhankelijkheden kunnen op een test of op een groep zijn.
In het bovenstaande programma, aangezien mytest2 afhankelijk is van mytest1, wordt eerst mytest1 uitgevoerd en vervolgens wordt mytest2 uitgevoerd. Als mytest1 mislukt, wordt mytest2 niet aangeroepen. Dit is hoe afhankelijke testgevallen vooraf kunnen worden gedefinieerd om een specifieke workflow te besturen die u wilt uitvoeren.
# 9) Luisteraars
Luisteraars luisteren naar elke gebeurtenis die plaatsvindt tijdens tests. Luisteraars worden zowel in JUnit als in TestNG ondersteund. Dus als u bepaalde taken wilt uitvoeren of een specifiek bericht in het logboek wilt weergeven voordat de test start, nadat de test is voltooid, wanneer de test wordt overgeslagen, wanneer de test is geslaagd of mislukt, hebben we deze Listener-functies die ons in staat stellen om doe dit
JUnit gebruikt de Listener-klasse en TestNG gebruikt een Listener-interface. TestNG schrijft een listener-klasse die de listener-interfacemethoden definieert, en de tweede stap is om de naam van deze Listener-klasse aan te roepen met behulp van @Listeners-annotatie in de hoofdklasse.
JUnit erft ook de methoden van de bovenliggende klasse Listener, waarna een Listener runner-klasse wordt gedefinieerd om de listener-functies toe te passen op een of meer hoofdklassen.
Luisteraar in TestNG
Er is een ITestListener-interface van waaruit TestNG wordt geïmplementeerd.
Hieronder staan de methoden die moeten worden gedefinieerd wanneer ITestListener wordt geïmplementeerd -
- OnTestStart ()
- OnTestFailure ()
- OnTestSuccess ()
- OnTestSkipped ()
- OnStart ()
- OnFinish ()
Hieronder ziet u het codefragment dat onTestStart () en onTestSuccess () demonstreert
Roep deze listener-klasse in uw hoofdklasse aan zoals hieronder getoond, met behulp van annotatie @Listener:
c ++ ongedefinieerde verwijzing naar klassefunctie
Luisteraar in JUnit 5
RunListener is de klasse die moet worden uitgebreid door uw listener-klasse om de listener-functies te definiëren.
We hebben de volgende methoden voor JUnit:
- testRunStarted
- testRunFinished
- testFailure
- tesIgnored
Er moet een listener-uitvoeringsklasse worden gemaakt om de bovenstaande listener-klasse aan te roepen.
U kunt de listener Mylistener-klasse op meerdere klassen toepassen met testmethoden.
Gevolgtrekking
In deze JUnit Vs TestNG-zelfstudie hebben we TestNG- en JUnit-frameworks vergeleken. We hebben de algemene functies geleerd die worden ondersteund in zowel de frameworks als aanvullende functies die alleen in TestNG worden ondersteund. Blijkbaar zijn er alleen een paar extra functies in TestNG, zoals parallelle uitvoering en afhankelijkheidstests. De meeste functies die door TestNG worden ondersteund, zijn ook beschikbaar in JUnit.
Er zijn kleine afwijkingen in termen van syntaxis, terminologieën in JUnit versus TestNG voor de algemene functies. Degenen die de kracht van JUnit ten opzichte van TestNG ondermijnden, zouden zich tot nu toe hebben gerealiseerd, d.w.z. JUnit is ook een van de krachtige automatiseringsraamwerken.
We komen terug met nog veel meer interessante aspecten van JUnit. Blijf bij de aankomende tutorials !!!
Aanbevolen literatuur
- JUnit-zelfstudie voor beginners - Wat is JUnit-testen
- Lijst met JUnit-annotaties: JUnit 4 versus JUnit 5
- Hoe JUnit 5 Annotation @RepeatedTest met voorbeelden te gebruiken
- JUnit Negeer testgeval: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- TestNG-installatie, basisprogramma en rapporten
- TestNG-annotaties en luisteraars
- TestNG-zelfstudie: inleiding tot TestNG-framework
- Beweringen in selenium met behulp van Junit- en TestNG-frameworks