junit test execution order
Ta vadnica pojasnjuje, kako nastaviti izvršilni nalog za testne primere JUnit. Spoznali boste opombe in razrede za nastavitev vrstnega reda izvajanja preskusa JUnit v JUnit 4 v primerjavi z JUnit 5:
Naučili smo se, kako ustvariti preskusno zbirko, kako dodati kategorijo ali oznako testnim primerom in kako filtrirati teste (izključiti ali vključiti testne primere) na podlagi kategorije ali oznake v naši prejšnji vadnici.
Poleg tega smo izvedeli, da v JUnit 4 imamo @Category, @IncludeCategory, in @ExcludeCategory za filtriranje testnih primerov, medtem ko JUnit 5 ima @IncludeTags in @ExcludeTags storiti enako.
JUnit 5 ima dodatne možnosti filtriranja z uporabo pripisov @IncludePackages, @ExcludePackages, in tudi opombe za vključitev ali izključitev razredov z vzorci imen razredov.
=> Tukaj si oglejte A-Z vadnic JUnit Training .
Kaj se boste naučili:
Nalog za izvršitev preskusa JUnit
V tej vadnici bomo izvedeli, kako nastaviti vrstni red za vsak testni primer, tako da se bodo izvajali v določenem vrstnem redu. Naučili se bomo, kako naročiti teste tako v JUnit 4 kot v JUnit 5.
Preskusne metode privzeto ne sledijo določenemu vrstnemu redu.Testnih primerov ni treba nujno izvajati v vrstnem redu, v katerem so bili napisani.
Obstajajo različni načini ali načini za določanje vrstnega reda izvedbe testnih primerov. Poglobili se bomo tudi v to, kako se JUnit 4 razlikuje pri razvrščanju testnih primerov v primerjavi z JUnit 5.
JUnit 4: @FixedMethodOrder, Class MethodSorters
Od JUnit 4.11 dalje imamo pripis @FixMethodOrder in MethodSorters.class podpiranje možnosti določanja naročila za izvedbo testa.
Paket org.junit.runners. * je treba uvoziti, da vključuje razred MethodSorters . Ta razred odloča, kako je treba naročiti testne primere. MethodSorters imeti tri enum vrednote.
Spodaj so vrednosti števila razreda skupaj z namenom, ki mu služi vsaka vrednost:
MethodSorters.DEFAULT | Ta vrednost enum razvrsti izvedbo preizkusa v določenem vrstnem redu. Vendar ni nikoli mogoče predvideti, v kakšnem vrstnem redu bi lahko izvajali testne primere. |
To je razlog, zakaj imate nadzor nad odločitvijo, kateri testni primer se bo najprej zagnal in kateri bo sledil naslednjemu. | |
Opazil sem, da razred z več metodami, razvrščenimi po DEFAULT enum, ko se izvede, vrstni red ostane enak vsakič med izvajanjem testa. | |
Vendar nikakor ne bi mogel napovedati ali ugotoviti načina postavitve naročila. | |
MethodSorters.JVM | Vrstni red izvajanja testa z naštevanjem JVM je, kot pove že ime, določil JVM. |
V tem primeru se testi vsakič, ko zaženete predavanje, izvedejo ne v enakem, ampak v naključnem vrstnem redu. | |
Z drugimi besedami, vrstni red testov se med vsakim izvajanjem spremeni. | |
MethodSorters.NAME_ASCENDING | Ta enum razvrsti testne metode v leksikografskem vrstnem redu imena metode. Zato ste lahko prepričani, da je to najbolj predvidljiv način za izvedbo preizkusa. |
Zato se lahko predhodno odločite za zaporedje testov, ki temelji na leksikografskem vrstnem redu imena, ki ste ga nastavili. |
Pripis @FixedMethodOrder sprejme vhodni parameter MethodSorters s svojo enum vrednostjo. Paket, potreben za pripis, je org.junit.FixedMethodOrder.
Poglejmo, kako se izvaja s kodo.
Izvajanje kode za MethodSorters.DEFAULT
Ustvarimo datoteko razreda JUnit Junit4TestOrder.java ' kje bomo uporabili MethodSorters.DEFAULT
Koda za 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 '); } }
Predavanje izvedemo trikrat in opazimo, da se izvaja isti vrstni red testov, kot je prikazano spodaj.
V oknu konzole so bili prikazani rezultati, kot je prikazano spodaj - vrstni red izvedbe testa je TestCase_3, TestCase_1 in TestCase_2, vrstni red pa se ne spreminja s številom tekov.
Izvajanje kode za MethodSorters. JVM
Zdaj bomo posodobili 'Junit4TestOrder.java', da bo MethodSorters.JVM
Delček kode za Junit4TestOrder.java
@FixMethodOrder(MethodSorters . JVM ) public class JUnit4TestOrder {
Razred zaženemo dvakrat in vrstni red izvajanja testov se z vsakim zagonom spremeni.
Okno konzole za najprej zagon je prikazan spodaj:
Okno konzole za drugič zagon je prikazan spodaj:
Močno opazujte spremembo vrstnega reda izvajanja testov v obeh poteh. Vrstni red preizkusov v obeh tekih se je razlikoval.
Izvajanje kode za MethodSorters.NAME_ASCENDING
Zdaj bomo posodobili 'Junit4TestOrder.java', da bo MethodSorters.NAME_ASCENDING
Delček kode za Junit4TestOrder.java
@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class JUnit4TestOrder {
Razred zaženemo dvakrat, vrstni red izvedenih testov ostane enak in se izvede po naraščajočem vrstnem redu imena metode.
Okno konzole prikazuje rezultat preizkusov, izvedenih v vrstnem redu TestCase_1, TestCase_2 in TestCase_3.
JUNIT 5: @TestMethodOrder, @Order, Interface MethodOrderer
Če želite nadzorovati vrstni red izvajanja testov, pomagajo narediti naslednje:
- Pripis @TestMethodOrder
- Pripis @Order
- Razredi, ki pripadajo vmesnikom MethodOrderer
Vgrajeni razredi MethodOrderer in njihove podrobnosti so navedeni spodaj:
MethodOrderer je vgrajen v razred | Iz paketa | Podrobnosti |
---|---|---|
Alfanumerično | org.junit.jupiter.api.MethodOrderer.Alfanumerični | Razvrsti preskusne metode alfanumerično glede na njihova imena |
Opomba za naročilo | org.junit.jupiter.api.MethodOrderer.OrderAnnotation | Razvrsti testne metode številčno na podlagi vrednosti, posredovanih pripisu @Order |
Naključen | org.junit.jupiter.api.MethodOrderer.Random | Naključno razvrsti testne metode, tako kot v primeru MethodSorters.JVM v JUnit 4 |
Poglejmo si zdaj predstavitev vsake od teh strategij naročanja:
Izvajanje kode za alfanumerični razred
Ustvarimo datoteko razreda JUnit 5 z imenom JUnit5TestOrder.java, enako kot JUnit4TestOrder.java, in uporabimo pripis z Alphanumeric.class za alfanumerično naročanje testov.
Koda za 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 '); } }
Predavanje smo izvedli trikrat in še vedno vidimo isti vrstni red preskusov v alfanumerično razvrščenem vrstnem redu imena testne metode.
Po izvedbi datoteke predavanja, vrstni red izvedbe testa:
- Testcase_1,
- Testcase_2 in
- Testcase_3
Opomba: Alfanumerična strategija razvrščanja razlikuje med velikimi in malimi črkami torej v primeru, da bi imeli še en testni primer z imenom testcase_1.
Vrstni red izvršitve bi bil:
- Testcase_1,
- Testcase_2,
- Testcase_3,
- testcase_1.
Zato ima velika začetnica prednost pred malimi imeni metod.
Izvajanje kode za naključni razred
Zdaj bomo posodobili razred JUnit 5 razreda JUnit5TestOrder.java, da bomo lahko uporabljali pripis z Random.class
Delček kode za Junit5TestOrder.java
@TestMethodOrder (Random.class) public class JUnit5TestOrder {
Razred smo izvedli dvakrat in videli smo, da je bil vsakič, ko smo izvedli razred, vrstni red izvedbe testa naključno urejen.
Poizvedba datoteke predavanja za prvič , vrstni red izvedbe testa je bil:
- Testcase_2,
- Testcase_1
- Testcase_3
Vrstni red izvršitve, ko je tekel za drugič čas je pokazal:
- Testcase_2,
- Testcase_3
- Testcase_1 .
Izvajanje kode za OrderAnnotation.class
Zdaj bomo posodobili razred JUnit 5 razreda JUnit5TestOrder.java za uporabo pripisa z OrderAnnotation.class. Pripis @ Naročilo bo imel tudi pomembno vlogo pri določanju prednosti preskusnih metod tukaj.
Delček kode za 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 '); } }
Torej, v tej strategiji nastavljanja vrstnega reda za izvajanje testa pripis @Order vsiljuje preskusne metode, ki se izvajajo glede na vrednost naročila za to pripravljen.
Nižja kot je vrednost @Order za preskusno metodo, večja je njena prednost med izvajanjem.
Po izvedbi je vrstni red testov potekal na naslednji način:
- Testcase_3,
- Testcase_1
- Testcase_2, ker je vrstni red za testne primere 1,2 oziroma 3.
Zato ni pomembno, ali so testni primeri napisani po vrstnem redu. Poleg tega ni vseeno, ali so imena metod v alfanumeričnem vrstnem redu ali ne.
JUNIT 5: Ustvarjanje naročila po meri
Poleg tega vgrajeni razredi naročil JUnit 5 podpira tudi naročila po meri z izvajanjem vmesnika MethodOrderer . Od različice 5.4 JUnit 5 je podprto razvrščanje po meri.
Poglejmo hitro, kako ustvarimo in izvedemo vrstni red po meri glede na dolžino metode.
Korak 1: Ustvaril je razred po meri, ki je implementiral vmesnik MethodOrderer in razred poimenoval kot TestCaseLengthOrder
Koda za 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())); } }
Razlaga kode TestCaseLengthOrder:
- Razred naročila po meri se ustvari z izvajanjem vmesnika MethodOrderer.
- void orderMethods (MethodOrderContext context) {} metoda, ki je vgrajena metoda, izvedena iz Interface MethodOrderer. Tukaj definirate izvajanje logike testnega razvrščanja.
- MethodDescriptor je vmesnik, ki vsebuje podrobnosti o metodi:
- Metoda MethodDescriptor.getMethod () dobi ime metode za ta deskriptor.
- Ime metode se pretvori v niz z metodo getName (), tj. MethodDescriptor.getMethod (). GetName () in
- Dolžina metode () pridobi dolžino metode (tako kot string.length () pridobi dolžino vrednosti niza).
- Vsa imena metod se med seboj primerjajo z uporabo metode compareTo ().
- Metoda getMethodDescriptors () dobi seznam vseh deskriptorjev metode v razredu.
- Metoda sort () razvrsti predmete MethodDescriptor.
Zdaj, ko smo jasno razumeli vsak API metodeOrderer, upamo, da je zgornjo kodo enostavno razložiti.
2. korak : Uporabite razred naročila po meri, kot uporabljate vgrajeni vrstni red v testnem razredu.
Kot vhod v pripis @TestMethodOrder.
Koda za 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(){ }
3. korak:
Post izvedba JUnit_CustomOrder.class , vrstni red izvedbe testa je glede na naraščajoči vrstni red dolžine imena testnih primerov naslednji:
- dodaj (),
- subt (),
- deli ()
- pomnoži ()
Zaključek
Za zaključek te vadnice o Nalogu za izvajanje preizkusa JUnit.
- Naučili smo se, kako nastaviti vrstni red testnih primerov z uporabo določenih pripisov in posebnih razredov.
- Spoznali smo tudi različne načine naročanja testov za JUnit 4 in JUnit 5, na podlagi katerih so se spremenile strategije naročanja.
- Poleg tega smo se naučili, kako lahko v JUnit 5 ustvarimo tudi prilagojeni razred razvrščanja in ga uporabimo za naročanje testnih primerov med njihovim izvajanjem.
=> Tu si oglejte vodnik za začetnike JUnit.
Priporočeno branje
- JUnit testi: Kako napisati primere testov JUnit s primeri
- Seznam pripisov JUnit: JUnit 4 Vs JUnit 5
- JUnit Ignore Test Case: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- JUnit Test Suite & Filtriranje testnih primerov: JUnit 4 Vs JUnit 5
- Kaj je preskusna naprava JUnit: Vadnica s primeri JUnit 4
- Vadnica JUnit za začetnike - kaj je testiranje JUnit
- Več načinov za izvajanje preskusov JUnit
- Kako vzporedno izvajati obsežno izvajanje testov Appium