junit test execution order
In deze zelfstudie wordt uitgelegd hoe u de uitvoeringsvolgorde voor JUnit-testcases instelt. U leert over annotaties en klassen om de JUnit Test Execution Order in JUnit 4 versus JUnit 5 in te stellen:
We hebben geleerd hoe je een testsuite kunt maken, hoe je een categorie of tag aan de testcases kunt toevoegen en hoe je tests kunt uitfilteren (de testcases uitsluiten of opnemen) op basis van de categorie of tag in onze vorige tutorial.
Bovendien hebben we geleerd dat we dat in JUnit 4 hebben gedaan @Category, @IncludeCategory, en @ExcludeCategory voor het filteren van de testgevallen terwijl JUnit 5 heeft @IncludeTags en @ExcludeTags hetzelfde doen.
JUnit 5 heeft extra filteropties met behulp van annotaties @IncludePackages, @ExcludePackages, en ook annotaties om klassen op te nemen of uit te sluiten met behulp van klassenaam patronen.
Kijk hier om A-Z van JUnit-trainingshandleidingen te zien
Wat je leert:
JUnit Testuitvoeringsopdracht
In deze zelfstudie leren we hoe u voor elke testcase een volgorde instelt, zodat ze in de ingestelde volgorde worden uitgevoerd. We zullen leren hoe u tests kunt bestellen in JUnit 4 en in JUnit 5.
De testmethoden volgen standaard niet een specifieke volgorde.De testcases hoeven niet noodzakelijk te worden uitgevoerd in de volgorde waarin ze zijn geschreven.
Er zijn verschillende manieren of modi om de volgorde van uitvoering voor de testgevallen in te stellen. We zullen ook diep ingaan op hoe JUnit 4 varieert in het bestellen van de testcases in vergelijking met JUnit 5.
JUnit 4: @FixedMethodOrder, Class MethodSorters
Vanaf JUnit 4.11 hebben we de annotatie @RTLnieuws en MethodSorters.class ondersteuning van de mogelijkheid om een order te plaatsen voor de uitvoering van een test.
Het pakket org.junit.runners. * moet worden geïmporteerd om de klasse op te nemen MethodeSorteerders Deze klasse bepaalt hoe de testcases besteld moeten worden. MethodeSorteerders hebben drie opsomming waarden.
Hieronder staan de opsommingswaarden van de klasse, samen met het doel dat elk van de waarden dient:
| MethodSorters.DEFAULT | Deze opsommingswaarde sorteert de testuitvoering in een specifieke volgorde. Het is echter nooit voorspelbaar in welke volgorde de testcases worden uitgevoerd. |
| Dit is de reden waarom u de controle heeft over uw beslissing welke testcase als eerste moet worden uitgevoerd en welke vervolgens moeten volgen. | |
| Ik heb opgemerkt dat een klasse met meerdere methoden gesorteerd met DEFAULT enum wanneer uitgevoerd, de volgorde elke keer tijdens de testuitvoering hetzelfde blijft. | |
| Ik kan echter op geen enkele manier voorspellen of achterhalen hoe de volgorde is ingesteld. | |
| MethodSorters.JVM | De volgorde van testuitvoering met JVM enum is zoals de naam aangeeft, wordt bepaald door de JVM. |
| In dit geval worden de tests elke keer dat u de klas uitvoert, niet in dezelfde maar in willekeurige volgorde uitgevoerd. | |
| Met andere woorden, de volgorde van de tests verandert tijdens elke run. | |
| MethodSorters.NAME_ASCENDING | Deze opsomming sorteert de testmethoden in lexicografische volgorde van de naam van de methode. Daarom kunt u erop vertrouwen dat dit de meest voorspelbare manier is om uw testuitvoering te bestellen. |
| U kunt daarom van tevoren de volgorde van de tests bepalen op basis van de lexicografische volgorde van de naam die u instelt. |
De annotatie @RTLnieuws neemt de invoerparameter van MethodeSorteerders met zijn opsommingswaarde. Het pakket dat nodig is voor de annotatie is org.junit.FixedMethodOrder.
Laten we eens kijken hoe het wordt geïmplementeerd via de code.
Code-implementatie voor MethodSorters.DEFAULT
Laten we een JUnit-klassenbestand maken ‘ Junit4TestOrder.java’ waar we zullen gebruiken MethodSorters.DEFAULT
De code voor Junit4TestOrder.java
We voeren de klasse driemaal uit en zien dat dezelfde volgorde van tests wordt uitgevoerd als hieronder, maar de testgevallen kunnen al dan niet in de gesorteerde volgorde worden uitgevoerd.
Het consolevenster toonde de resultaten zoals hieronder: de volgorde van testuitvoering is TestCase_3, TestCase_1 en TestCase_2 en de volgorde verandert niet met het aantal runs.

Code-implementatie voor MethodSorters. JVM
We zullen nu ‘Junit4TestOrder.java’ updaten om MethodSorters.JVM
Het codefragment voor Junit4TestOrder.java
We voeren de les twee keer uit en de volgorde waarin de tests worden uitgevoerd, verandert bij elke run.
Het consolevenster voor het eerste run is zoals hieronder getoond:

Het consolevenster voor het tweede run is zoals hieronder getoond:

Let goed op de verandering in de volgorde waarin de tests worden uitgevoerd in beide runs. De volgorde van de tests in de twee runs is verschillend.
Code-implementatie voor MethodSorters.NAME_ASCENDING
We zullen nu ‘Junit4TestOrder.java’ updaten om MethodSorters.NAME_ASCENDING
Het codefragment voor Junit4TestOrder.java
We voeren de klasse twee keer uit, de volgorde van de uitgevoerde tests blijft hetzelfde en wordt uitgevoerd in oplopende volgorde van de naam van de methode.
Het consolevenster toont het resultaat van de tests die zijn uitgevoerd in de volgorde TestCase_1, TestCase_2 en TestCase_3.

JUnit 5: @TestMethodOrder, @Order, Interface MethodOrderer
Om de volgorde van uitvoering van tests te controleren, helpen de onderstaande entiteiten hetzelfde te doen:
- De annotatie @TestMethodOrder
- De annotatie @Order
- De klassen die tot MethodOrderer-interfaces behoren
De ingebouwde MethodOrderer-klassen en hun details zijn als volgt:
| MethodOrderer's ingebouwde klasse | Uit pakket | Details |
|---|---|---|
| Alfanumeriek | org.junit.jupiter.api.MethodOrderer.Alphanumeric | Sorteert testmethoden alfanumeriek op basis van hun naam |
| OrderAnnotation | org.junit.jupiter.api.MethodOrderer.OrderAnnotation | Sorteert testmethoden numeriek op basis van de waarden die zijn doorgegeven aan de annotatie @Order |
| Willekeurig | org.junit.jupiter.api.MethodOrderer.Random | Sorteert testmethoden willekeurig, net als in het geval MethodSorters.JVM in JUnit 4 |
Laten we nu eens kijken naar de demonstratie van elk van deze bestelstrategieën:
Code-implementatie voor alfanumerieke klasse
Laten we een JUnit 5-klassebestand maken met de naam JUnit5TestOrder.java, hetzelfde als JUnit4TestOrder.java, en laten we de annotatie met Alphanumeric.class gebruiken om de tests alfanumeriek te ordenen.
De code voor Junit5TestOrder.java
We hebben de klasse driemaal uitgevoerd en zien nog steeds dat dezelfde volgorde van tests wordt uitgevoerd in de alfanumeriek gesorteerde volgorde van de naam van de testmethode.
Na uitvoering van het klassebestand, de volgorde van de testuitvoering:
- Testcase_1,
- Testcase_2 en
- Testcase_3
Opmerking: De alfanumerieke sorteerstrategie is hoofdlettergevoelig dus voor het geval we nog een testcase hadden met de naam testcase_1.
De volgorde van uitvoering zou zijn:
- Testcase_1,
- Testcase_2,
- Testcase_3,
- testcase_1.
Daarom heeft de hoofdletter voorrang op de namen van methoden in kleine letters.
Code-implementatie voor Random.class
We zullen nu de JUnit 5-klasse JUnit5TestOrder.java bijwerken om de annotatie met Random.class te gebruiken
Het codefragment voor Junit5TestOrder.java
We hebben de klas twee keer gerund en we zagen dat elke keer dat we de klas liepen, de volgorde van de testuitvoering willekeurig was.
Post-uitvoering van het class-bestand voor het eerste keer was de volgorde van uitvoering van de test:
- Testcase_2,
- Testcase_1
- Testcase_3
De volgorde van uitvoering bij het uitvoeren van de tweede de tijd toonde:
- Testcase_2,
- Testcase_3
- Testcase_1
Code-implementatie voor OrderAnnotation.class
We zullen nu de JUnit 5-klasse JUnit5TestOrder.java bijwerken om de annotatie te gebruiken met OrderAnnotation.class. De annotatie @Bestellen zal ook hier een belangrijke rol spelen bij de prioriteitstelling van de testmethoden.
Het codefragment voor Junit5TestOrder.java
Dus, in deze strategie van het opzetten van de order voor testuitvoering, dwingt @Order annotatie de testmethoden af om te worden uitgevoerd volgens de bestellingswaarde er klaar voor zijn.
Hoe lager de waarde van de @Order voor een testmethode, hoe hoger de prioriteit tijdens de uitvoering.
Na de uitvoering liep de volgorde van de tests als volgt:
- Testcase_3,
- Testcase_1
- Testcase_2 omdat de volgorde die is ingesteld voor de testgevallen respectievelijk 1,2 en 3 is.
Daarom maakt het niet uit of de testcases op volgorde zijn geschreven. Bovendien maakt het niet uit of de namen van de methoden al dan niet in alfanumerieke volgorde staan.
JUnit 5: Aangepaste volgorde maken
Naast de ingebouwde Order-klassen ondersteunt JUnit 5 ook aangepaste bestellingen door de interface te implementeren MethodeBesteller Vanaf JUnit 5 versie 5.4 wordt de aangepaste sortering ondersteund.
Laten we snel kijken hoe u een aangepaste volgorde kunt maken en implementeren op methodelengte.
Stap 1: Er is een aangepaste orderklasse gemaakt die de MethodOrderer-interface implementeert en de klasse de naam TestCaseLengthOrder heeft gegeven
De code voor TestCaseLengthOrder.java
TestCaseLengthOrder code uitleg:
- Een aangepaste orderklasse wordt gemaakt door de MethodOrderer-interface te implementeren.
- void orderMethods (MethodOrderContext context) {} methode die de ingebouwde methode is geïmplementeerd vanuit de Interface MethodOrderer. Hier definieert u de implementatie van de testorderlogica.
- MethodDescriptor is een interface die details over een methode bevat:
- De methode MethodDescriptor.getMethod () haalt de naam van de methode voor deze descriptor op.
- De naam van de methode wordt geconverteerd naar String met de methode getName (), d.w.z. MethodDescriptor.getMethod (). GetName () en
- De methode length () haalt de lengte van de methode op (net zoals string.length () de lengte van een stringwaarde ophaalt).
- Alle namen van methoden worden met elkaar vergeleken met behulp van de methode CompareTo ().
- De methode getMethodDescriptors () haalt de lijst op van alle methodebeschrijvingen in een klasse.
- De methode sort () sorteert de MethodDescriptor-objecten.
Nu we elke API van MethodOrderer duidelijk hebben begrepen, hopen we dat het gemakkelijk is om de bovenstaande code te interpreteren.
Stap 2 : Gebruik de aangepaste volgorde-klasse zoals u elke ingebouwde volgorde in de testklasse gebruikt.
Als invoer voor de annotatie @TestMethodOrder.
De code voor JUnit_CustomOrder.java
Stap 3:
Na uitvoering van JUnit_CustomOrder.class , is de volgorde van testuitvoering als volgt gebaseerd op de oplopende volgorde van de lengte van de naam van de testgevallen:
- toevoegen(),
- subt (),
- verdelen ()
- vermenigvuldigen()
Gevolgtrekking
Om deze tutorial over JUnit Test Execution Order af te sluiten.
- We hebben geleerd hoe we de volgorde van testgevallen kunnen instellen met behulp van specifieke annotaties en specifieke klassen.
- We hebben ook verschillende manieren geleerd om tests voor JUnit 4 en JUnit 5 te bestellen, op basis waarvan de bestelstrategieën zijn gewijzigd.
- Bovendien hebben we geleerd hoe we in JUnit 5 ook een aangepaste sorteerklasse konden maken en deze konden gebruiken voor het ordenen van de testcases tijdens hun uitvoering.
Bekijk hier de JUnit-beginnershandleiding.
Aanbevolen literatuur
- JUnit-tests: hoe u JUnit-testcases schrijft met voorbeelden
- Lijst met JUnit-annotaties: JUnit 4 versus JUnit 5
- JUnit Negeer testgeval: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- JUnit-testsuite en filtertestcases: JUnit 4 versus JUnit 5
- Wat is een JUnit-testopstelling: zelfstudie met JUnit 4-voorbeelden
- JUnit-zelfstudie voor beginners - Wat is JUnit-testen
- Meerdere manieren om JUnit-tests uit te voeren
- Hoe u Appium-tests op grote schaal parallel uitvoert