junit test execution order
V tomto výučbe sa dozviete, ako nastaviť príkaz na vykonanie pre testovacie prípady JUnit. Dozviete sa viac o anotáciách a triedach pre nastavenie poradia vykonania testu JUnit v JUnit 4 vs JUnit 5:
Naučili sme sa, ako vytvoriť testovaciu sadu, ako pridať kategóriu alebo značku do testovacích prípadov a ako filtrovať testy (vylúčiť alebo zahrnúť testovacie prípady) na základe kategórie alebo značky v našom predchádzajúcom tutoriáli.
Okrem toho sme sa dozvedeli, že v JUnit 4 áno @Category, @IncludeCategory, a @ExcludeCategory na filtrovanie testovacích prípadov, zatiaľ čo JUnit 5 má @IncludeTags a @ExcludeTags urobiť to isté.
JUnit 5 má ďalšie možnosti filtrovania pomocou anotácií @IncludePackages, @ExcludePackages, a tiež anotácie na zahrnutie alebo vylúčenie tried pomocou vzorov názvov tried.
=> Začiarknite tu a pozrite si výcvikové návody A-Z JUnit .
Čo sa dozviete:
Príkaz na vykonanie testu JUnit
V tomto tutoriále sa naučíme, ako nastaviť poradie pre každý testovací prípad tak, aby bežali v stanovenom poradí. Dozvieme sa, ako objednať testy v JUnit 4 aj v JUnit 5.
Testovacie metódy predvolene nesledujú konkrétne poradie.Testovacie prípady sa nemusia nevyhnutne vykonávať v poradí, v akom boli napísané.
Existujú rôzne spôsoby alebo režimy, ako nastaviť poradie vykonania pre testovacie prípady. Taktiež sa hlboko ponoríme do toho, ako sa JUnit 4 líši pri objednávaní testovacích prípadov v porovnaní s JUnit 5.
JUnit 4: @FixedMethodOrder, Class MethodSorters
Počnúc JUnit 4.11 máme anotáciu @FixMethodOrder a MethodSorters.class podpora zariadenia na stanovenie príkazu na vykonanie testu.
Balík org.junit.runners. * je potrebné importovať, aby zahŕňala triedu MethodSorters . Táto trieda rozhoduje o tom, ako je potrebné objednať testovacie prípady. MethodSorters mať tri enum hodnoty.
Nižšie sú uvedené enum hodnoty triedy spolu s účelom, ktorým každá z týchto hodnôt slúži:
MethodSorters.DEFAULT | Táto hodnota výčtu zoradí vykonanie testu v konkrétnom poradí. Nikdy však nie je možné predvídať, v akom poradí môže spustiť testovacie prípady. |
To je dôvod, prečo máte kontrolu nad svojím rozhodnutím, ktorá testovacia vitrína by mala bežať ako prvá a ktoré by mali nasledovať ďalej. | |
Všimol som si, že trieda s viacerými metódami triedenými s VÝCHODNÝM enumom, keď je vykonaná, zostáva poradie rovnaké vždy počas vykonávania testu. | |
Neexistuje však žiadny spôsob, ako by som mohol predvídať alebo prísť na to, ako bolo dané poradie. | |
MethodSorters.JVM | Poradie vykonania testu s výčtom JVM je, ako naznačuje názov, určené JVM. |
V takom prípade sa testy nebudú vykonávať zakaždým, keď triedu spustíte, ale v rovnakom, ale náhodnom poradí. | |
Inými slovami, poradie testov sa mení počas každého behu. | |
MethodSorters.NAME_ASCENDING | Tento výčet zoraďuje testovacie metódy v lexikografickom poradí podľa názvu metódy. Preto si môžete byť istí, že toto je najpredvídateľnejší spôsob objednania vykonania testu. |
Preto sa môžete vopred rozhodnúť o postupnosti testov na základe lexikografického poradia názvu, ktoré ste nastavili. |
Anotácia @FixedMethodOrder zaberá vstupný parameter MethodSorters s jeho enumovou hodnotou. Balenie potrebné pre anotáciu je org.junit.FixedMethodOrder.
Pozrime sa, ako sa implementuje prostredníctvom kódu.
Implementácia kódu pre MethodSorters.DEFAULT
Vytvorme súbor triedy JUnit ‘ Junit4TestOrder.java ' kde použijeme MethodSorters.DEFAULT
Kód pre Junit4TestOrder.java
@FixMethodOrder(MethodSorters.DEFAULT) public class JUnit4TestOrder { @Test public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
Triedu spustíme trikrát a vidíme rovnaké poradie testov, aké je spustené nižšie. Testovacie prípady sa však môžu alebo nemusia vykonať v zoradenom poradí.
V okne konzoly sa zobrazili výsledky uvedené nižšie - poradie vykonania testu je TestCase_3, TestCase_1 a TestCase_2 a poradie sa nemení podľa počtu spustení.
Implementácia kódu pre MethodSorters. JVM
Teraz aktualizujeme súbor „Junit4TestOrder.java“ MethodSorters.JVM
Fragment kódu pre Junit4TestOrder.java
@FixMethodOrder(MethodSorters . JVM ) public class JUnit4TestOrder {
Triedu spustíme dvakrát a poradie vykonávania testov sa pri každom spustení zmení.
Okno konzoly pre najprv beh je uvedený nižšie:
Okno konzoly pre druhý beh je uvedený nižšie:
Pozorne sledujte zmenu v poradí, v akom sa testy vykonávajú v obidvoch behoch. Poradie testov v dvoch behoch sa líšilo.
Implementácia kódu pre MethodSorters.NAME_ASCENDING
Teraz aktualizujeme súbor „Junit4TestOrder.java“ MethodSorters.NAME_ASCENDING
Fragment kódu pre Junit4TestOrder.java
@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class JUnit4TestOrder {
Triedu spustíme dvakrát, poradie vykonaných testov zostáva rovnaké a vykonáva sa podľa vzostupného poradia názvu metódy.
V okne konzoly sa zobrazujú výsledky testov vykonaných v poradí TestCase_1, TestCase_2 a TestCase_3.
JUnit 5: @TestMethodOrder, @Order, Interface MethodOrderer
Na kontrolu poradia vykonávania testov pomáhajú nasledujúce entity:
- Anotácia @TestMethodOrder
- Anotácia @Objednávka
- Triedy, ktoré patria do rozhraní MethodOrderer
Vstavané triedy MethodOrderer a ich podrobnosti sú uvedené nižšie:
MethodOrderer je postavený v triede | Z balenia | Detaily |
---|---|---|
Alfanumerické | org.junit.jupiter.api.MethodOrderer.Alfanumerický | Triedi testovacie metódy podľa abecedy podľa názvu |
OrderAnnotation | org.junit.jupiter.api.MethodOrderer.OrderAnnotation | Triedi testovacie metódy číselne na základe hodnôt odovzdaných do anotácie @Objednávka |
Náhodné | org.junit.jupiter.api.MethodOrderer.Random | Triedi testovacie metódy náhodne, rovnako ako v prípade MethodSorters.JVM v JUnit 4 |
Pozrime sa teraz na ukážku každej z týchto stratégií objednávania:
Implementácia kódu pre Alphanumeric.class
Vytvorme súbor triedy JUnit 5 s názvom JUnit5TestOrder.java rovnako ako JUnit4TestOrder.java a použijeme anotáciu s Alphanumeric.class na alfanumerické usporiadanie testov.
Kód pre Junit5TestOrder.java
@TestMethodOrder(Alphanumeric.class) public class JUnit5TestOrder { @Test public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
Triedu sme spustili trikrát a stále vidíme rovnaké poradie testov, ktoré sa spúšťajú v alfanumericky zoradenom poradí podľa názvu testovacej metódy.
Po vykonaní súboru triedy, poradie vykonania testu:
- Testcase_1,
- Testcase_2 a
- Testcase_3
Poznámka: Alfanumerická stratégia triedenia rozlišuje veľké a malé písmená takže v prípade, že by sme mali ďalší testovací prípad s názvom testcase_1.
Poradie exekúcie by bolo:
- Testcase_1,
- Testcase_2,
- Testcase_3,
- testcase_1.
Preto má veľké meno prednosť pred názvami metód malých písmen.
Implementácia kódu pre Random.class
Teraz aktualizujeme triedu JUnit 5 JUnit5TestOrder.java, aby používala anotáciu s Random.class
Fragment kódu pre Junit5TestOrder.java
@TestMethodOrder (Random.class) public class JUnit5TestOrder {
Triedu sme prebehli dvakrát a videli sme, že vždy, keď sme triedu prebehli, bolo náhodne nariadené poradie vykonania testu.
Po vykonaní súboru triedy pre prvýkrát , poradie vykonania testu bolo:
- Testcase_2,
- Testcase_1
- Testcase_3
Poradie exekúcie, keď sa kandidovalo na druhý čas ukázal:
- Testcase_2,
- Testcase_3
- Testcase_1 .
Implementácia kódu pre OrderAnnotation.class
Teraz aktualizujeme triedu JUnit 5 JUnit5TestOrder.java, aby sa anotácia použila s OrderAnnotation.class. Anotácia @Objednať bude tiež hrať dôležitú úlohu pri stanovovaní priorít testovacích metód.
Fragment kódu pre Junit5TestOrder.java
@TestMethodOrder(OrderAnnotation.class) public class JUnit5TestOrder { @Test @Order(1) public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test @Order(2) public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test @Order(3) public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
Takže v tejto stratégii nastavenia príkazu na vykonanie testu anotácia @Order vynúti spustenie testovacích metód podľa hodnota objednávky pripravuje sa na to.
Čím je hodnota testovacej metódy @Order nižšia, tým vyššia je jej priorita počas vykonávania.
Po vykonaní poradie testov prebehlo takto:
- Testcase_3,
- Testcase_1
- Testcase_2, pretože poradie nastavené pre testovacie prípady je 1,2, respektíve 3.
Z tohto dôvodu nezáleží na tom, či sú testovacie prípady napísané v poriadku. Okrem toho nezáleží na tom, či sú alebo nie sú názvy metód v alfanumerickom poradí.
JUnit 5: Vytvorenie vlastnej objednávky
Okrem vstavaných tried objednávok JUnit 5 podporuje implementáciu rozhrania aj vlastné objednávky MethodOrderer . Od verzie JUnit 5 verzie 5.4 je podporované vlastné triedenie.
Pozrime sa rýchlo, ako vytvoriť a implementovať vlastnú objednávku podľa dĺžky metódy.
Krok 1: Vytvorila sa trieda vlastnej objednávky implementujúca rozhranie MethodOrderer a pomenovala ju ako TestCaseLengthOrder
Kód pre TestCaseLengthOrder.java
public class TestCaseLengthOrder implements MethodOrderer { @Override public void orderMethods(MethodOrdererContext context) { MethodDescriptor md1; MethodDescriptor md2; context.getMethodDescriptors().sort((md1, md2)-> md1.getMethod().getName().length().compareTo(md2.getMethod().getName().length())); } }
Vysvetlenie kódu TestCaseLengthOrder:
- Trieda vlastnej objednávky sa vytvorí implementáciou rozhrania MethodOrderer.
- void orderMethods (MethodOrderContext context) {} metóda, ktorá je zabudovanou metódou implementovanou z Interface MethodOrderer. Tu definujete implementáciu logiky objednávania testov.
- MethodDescriptor je rozhranie, ktoré obsahuje podrobnosti o metóde:
- Metóda MethodDescriptor.getMethod () získa názov metódy pre tento deskriptor.
- Názov metódy sa prevedie na reťazec metódou getName (), tj. MethodDescriptor.getMethod (). GetName () a
- Metóda length () načíta dĺžku metódy (rovnako ako string.length () načíta dĺžku hodnoty reťazca).
- Všetky názvy metód sa navzájom porovnávajú pomocou metódy compareTo ().
- Metóda getMethodDescriptors () získa zoznam všetkých deskriptorov metódy v triede.
- Metóda sort () triedi objekty MethodDescriptor.
Teraz, keď sme každému API MethodOrdereru porozumeli jasne, dúfame, že je ľahké interpretovať vyššie uvedený kód.
Krok 2 : Použite triedu vlastných objednávok, ako používate všetky zabudované objednávky v testovacej triede.
Ako vstup do anotácie @TestMethodOrder.
Kód pre JUnit_CustomOrder.java
@TestMethodOrder(TestCaseLengthOrder.class) class JUnit_CustomOrder{ @Test public void subt(){ } @Test public void add(){ } @Test public void multiply(){ } @Test public void divide(){ }
Krok 3:
Po vykonaní JUnit_CustomOrder.class , poradie vykonania testu je založené na vzostupnom poradí podľa dĺžky názvu testovacieho prípadu:
- add (),
- subt (),
- rozdeliť ()
- znásobiť ()
Záver
Na záver tohto tutoriálu o objednávke vykonania testu JUnit.
- Naučili sme sa, ako nastaviť poradie testovacích prípadov pomocou konkrétnych anotácií a špecifických tried.
- Naučili sme sa tiež rôzne spôsoby objednávania testov pre JUnit 4 a JUnit 5, na základe ktorých sa zmenili stratégie objednávania.
- Okrem toho sme sa dozvedeli, ako sme v JUnit 5 mohli vytvoriť prispôsobenú triedu triedenia a použiť ju na objednávanie testovacích prípadov počas ich vykonávania.
=> Tu sa pozrite na príručku pre začiatočníkov JUnit.
Odporúčané čítanie
- Testy JUnit: Ako napísať testovacie prípady JUnit s príkladmi
- Zoznam anotácií JUnit: JUnit 4 Vs JUnit 5
- Testovací prípad JUnit Ignore: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- Testovacia sada JUnit a testovacie prípady filtrovania: JUnit 4 Vs JUnit 5
- Čo je to testovacie zariadenie JUnit: Výukový program s príkladmi JUnit 4
- Výukový program JUnit pre začiatočníkov - Čo je to Testovanie JUnit
- Viacero spôsobov vykonávania testov JUnit
- Ako paralelne spustiť rozsiahle vykonávanie testov Appium