junit test execution order
Ovaj vodič objašnjava kako postaviti redoslijed izvršenja za JUnit test slučajeve. Naučit ćete o bilješkama i klasama za postavljanje naloga za izvršavanje JUnit testa u JUnit 4 u odnosu na JUnit 5:
Naučili smo kako stvoriti testni paket, kako dodati kategoriju ili oznaku u test slučajeve i kako filtrirati testove (izuzeti ili uključiti test slučajeve) na temelju kategorije ili oznake u našem prethodnom vodiču.
Osim toga, to smo saznali u JUnit-u 4 @Kategorija, @UključiKategorija, i @ExcludeCategory za filtriranje test slučajeva dok JUnit 5 ima @IncludeTags i @ExcludeTags učiniti isto.
JUnit 5 ima dodatne mogućnosti filtriranja pomoću bilješki @IncludePackages, @ExcludePackages, a također i bilješke za uključivanje ili isključivanje klasa pomoću obrazaca naziva klasa.
=> Ovdje pogledajte kako biste vidjeli A-Z udžbenika JUNIT Training .
Što ćete naučiti:
JUnit Nalog za izvršenje testa
U ovom uputstvu naučit ćemo kako postaviti redoslijed za svaki testni slučaj tako da se izvršavaju postavljenim redoslijedom. Naučit ćemo kako naručiti testove u JUnit 4, kao i u JUnit 5.
Metode ispitivanja prema zadanim postavkama ne slijede određeni redoslijed.Test slučajevi se ne moraju nužno izvršavati onim redoslijedom kojim su napisani.
Postoje različiti načini ili načini postavljanja redoslijeda izvršenja za test slučajeve. Također ćemo duboko zaroniti u to kako varira JUnit 4 prilikom naručivanja testnih slučajeva u usporedbi s JUnit 5.
JUnit 4: @FixedMethodOrder, Class MethodSorters
Počevši od JUnit 4.11, imamo bilješku @FixMethodOrder i MethodSorters.class podržavajući mogućnost postavljanja naloga za izvršenje testa.
Paket org.junit.runners. * treba uvesti kako bi se uključila klasa Metodorteri . Ova klasa odlučuje kako treba naručiti ispitne slučajeve. Metodorteri imati tri nabrajanje vrijednosti.
Dolje su navedene vrijednosti nabrajanja klase zajedno sa svrhom kojoj služi svaka vrijednost:
MethodSorters.DEFAULT | Ova vrijednost nabrajanja izvršava razvrstavanje testa u određenom redoslijedu. Međutim, nikada nije predvidljivo kojim bi redoslijedom mogao pokretati test slučajeve. |
Zbog toga vi imate kontrolu nad odlukom koja će se testna proba pokrenuti prva, a koja slijedeća. | |
Primijetio sam da klasa s više metoda sortiranih s DEFAULT enumom prilikom izvršavanja, redoslijed ostaje isti svaki put tijekom izvođenja testa. | |
Međutim, ne postoji način na koji bih mogao predvidjeti ili odgonetnuti način postavljanja naloga. | |
MethodSorters.JVM | Redoslijed izvođenja testa s JVM enumom je kako naziv govori, JVM određuje. |
U ovom slučaju, svaki put kad pokrenete nastavu, testovi se neće izvoditi istim već slučajnim redoslijedom. | |
Drugim riječima, redoslijed ispitivanja mijenja se tijekom svakog izvođenja. | |
MethodSorters.NAME_ASCENDING | Ovo nabrajanje sortira metode ispitivanja leksikografskim redoslijedom naziva metode. Stoga možete biti sigurni jer je ovo najpredvidljiviji način naručivanja testa. |
Stoga možete unaprijed odlučiti slijed ispitivanja na temelju leksikografskog redoslijeda imena koje ste postavili. |
Bilješka @FixedMethodOrder uzima ulazni parametar od Metodorteri sa svojom nabrojanom vrijednošću. Paket potreban za bilješku je org.junit.FixedMethodOrder.
Pogledajmo kako se implementira kroz kod.
Implementacija koda za MethodSorters.DEFAULT
Stvorimo datoteku klase JUnit Junit4TestOrder.java ' gdje ćemo upotrijebiti MethodSorters.DEFAULT
Kôd 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 '); } }
Tri puta izvodimo nastavu i vidimo da se izvodi isti redoslijed testova kao u nastavku, međutim, test slučajevi mogu ili ne moraju biti izvršeni poredanim redoslijedom.
Prozor konzole prikazao je rezultate kao u nastavku - redoslijed izvođenja testa je TestCase_3, TestCase_1 i TestCase_2, a redoslijed se ne mijenja s brojem izvođenja.
Implementacija koda za MethodSorters. JVM
Sada ćemo ažurirati ‘Junit4TestOrder.java’ da bi imao MethodSorters.JVM
Isječak koda za Junit4TestOrder.java
@FixMethodOrder(MethodSorters . JVM ) public class JUnit4TestOrder {
Razred izvodimo dva puta i redoslijed izvođenja testova mijenja se sa svakim izvođenjem.
Prozor konzole za prvi trčanje je prikazano dolje:
Prozor konzole za drugi trčanje je prikazano dolje:
Pažljivo promatrajte promjenu redoslijeda u kojem se testovi izvode u obje vožnje. Redoslijed ispitivanja u dvije vožnje se razlikovao.
Implementacija koda za MethodSorters.NAME_ASCENDING
Sada ćemo ažurirati ‘Junit4TestOrder.java’ da bi imao MethodSorters.NAME_ASCENDING
Isječak koda za Junit4TestOrder.java
@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class JUnit4TestOrder {
Klasu izvodimo dva puta, redoslijed izvršenih testova ostaje isti i izvršava se prema rastućem redoslijedu imena metode.
Prozor konzole prikazuje rezultat testova izvršenih u redoslijedu TestCase_1, TestCase_2 i TestCase_3.
JUNIT 5: @TestMethodOrder, @Order, Interface MethodOrderer
Da bi kontrolirali redoslijed izvođenja testova, sljedeći entiteti pomažu učiniti isto:
- Napomena @TestMethodOrder
- Napomena @ Narudžba
- Klase koje pripadaju sučeljima MethodOrderer
Ugrađene klase MethodOrderer i njihovi detalji su kao u nastavku:
MethodOrderer je ugrađen u razredu | Iz paketa | Pojedinosti |
---|---|---|
Alfanumerički | org.junit.jupiter.api.MethodOrderer.Alfanumerički | Razvrstava metode ispitivanja alfanumerički na temelju njihovih imena |
Bilješka o narudžbi | org.junit.jupiter.api.MethodOrderer.OrderAnnotation | Razvrstava metode ispitivanja numerički na temelju vrijednosti proslijeđenih u bilješku @ Order |
Slučajno | org.junit.jupiter.api.MethodOrderer.Random | Slučajno sortira metode ispitivanja, baš kao u slučaju MethodSorters.JVM u JUnit 4 |
Pogledajmo sada demonstraciju svake od ovih strategija naručivanja:
Implementacija koda za alfanumerički.razred
Stvorimo datoteku klase JUnit 5 pod nazivom JUnit5TestOrder.java isto kao i JUnit4TestOrder.java i upotrijebimo napomenu s Alphanumeric.class za alfanumeričko naručivanje testova.
Kôd 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 '); } }
Tri smo puta izvodili nastavu i još uvijek vidimo isti redoslijed ispitivanja koji se izvode alfanumerički poredanim redoslijedom naziva metode ispitivanja.
Nakon izvršavanja datoteke klase, redoslijed izvođenja testa:
- Testcase_1,
- Testcase_2 i
- Testcase_3
Bilješka: Alfanumerička strategija sortiranja razlikuje velika i mala slova pa u slučaju da imamo još jedan testni slučaj s imenom testcase_1.
Redoslijed izvršenja bio bi:
- Testcase_1,
- Testcase_2,
- Testcase_3,
- testcase_1.
Stoga veliko slovo ima prednost nad imenima malih slova.
Implementacija koda za slučajni.razred
Sada ćemo ažurirati klasu JUnit 5 JUnit5TestOrder.java kako bismo koristili napomenu s Random.class
Isječak koda za Junit5TestOrder.java
@TestMethodOrder (Random.class) public class JUnit5TestOrder {
Dva smo puta izvodili nastavu i vidjeli smo da je svaki put, izvodeći nastavu, redoslijed izvođenja testa bio nasumično poredan.
Post izvršavanje datoteke klase za prvi put , redoslijed izvođenja testa bio je:
- Testcase_2,
- Testcase_1
- Testcase_3
Redoslijed izvršenja kada se kandidiralo za drugi vrijeme je pokazalo:
- Testcase_2,
- Testcase_3
- Testcase_1 .
Implementacija koda za OrderAnnotation.class
Sada ćemo ažurirati klasu JUnit5 JUnit5TestOrder.java za upotrebu bilješke s OrderAnnotation.class. Bilješka @Narudžba također će igrati važnu ulogu u postavljanju prioriteta ovdje testiranih metoda.
Isječak koda 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 '); } }
Dakle, u ovoj strategiji postavljanja redoslijeda za izvršavanje testa, bilješka @Order nameće metode ispitivanja koje će se izvoditi po vrijednost narudžbe biti postavljen za to.
Što je vrijednost metode @Order niža za ispitnu metodu, to joj je veći prioritet tijekom izvršavanja.
Nakon izvršenja, redoslijed testova tekao je kako slijedi:
- Testcase_3,
- Testcase_1
- Testcase_2 jer je redoslijed postavljen za test slučajeve 1,2, odnosno 3.
Zbog toga nije važno jesu li testovi napisani po redu. Osim toga, nije važno jesu li nazivi metoda alfanumeričkim redoslijedom ili nisu.
JUNIT 5: Stvaranje prilagođenog poretka
Osim toga, ugrađene klase narudžbi, JUnit 5 također podržava prilagođene narudžbe implementiranjem sučelja MethodOrderer . Počevši od JUnit 5 verzije 5.4, podržana je prilagođena sortiranje.
Pogledajmo brzo kako stvoriti i implementirati prilagođeni redoslijed prema duljini metode.
Korak 1: Stvorio je klasu prilagođene narudžbe koja implementira sučelje MethodOrderer i imenovao je klasu kao TestCaseLengthOrder
Kôd 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())); } }
Objašnjenje koda TestCaseLengthOrder:
- Klasa prilagođenog redoslijeda kreira se implementacijom sučelja MethodOrderer.
- void orderMethods (MethodOrderContext context) {} metoda koja je ugrađena metoda implementirana iz Interface MethodOrderer. Ovdje definirate implementaciju logike testnog naručivanja.
- MethodDescriptor je sučelje koje sadrži detalje o metodi:
- Metoda MethodDescriptor.getMethod () dobiva ime metode za ovaj deskriptor.
- Naziv metode pretvara se u String metodom getName () tj. MethodDescriptor.getMethod (). GetName () i
- Metoda length () dohvaća duljinu metode (baš kao što string.length () dohvaća duljinu vrijednosti niza).
- Sva imena metoda uspoređuju se međusobno pomoću metode compareTo ().
- Metoda getMethodDescriptors () dobiva popis svih deskriptora metode u klasi.
- Metoda sort () sortira objekte MethodDescriptor.
Sada, kad smo jasno razumjeli svaki API MethodOrderer, nadamo se da je lako protumačiti gornji kod.
Korak 2 : Koristite klasu prilagođenog redoslijeda kao što koristite bilo koju ugrađenu narudžbu u testnoj klasi.
Kao ulaz u napomenu @TestMethodOrder.
Kôd 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(){ }
Korak 3:
Post izvršenje JUnit_CustomOrder.class , redoslijed izvođenja testa je sljedeći na temelju rastućeg redoslijeda duljine naziva test slučajeva:
- dodati(),
- supt (),
- podijeli ()
- pomnožiti()
Zaključak
Da zaključim ovaj tutorial o JUnit Test Execution Order.
- Naučili smo kako postaviti redoslijed testnih slučajeva koristeći određene bilješke kao i određene klase.
- Također smo naučili razne načine naručivanja testova za JUnit 4 i JUnit 5, na temelju kojih su se promijenile strategije naručivanja.
- Osim toga, naučili smo kako u JUnit 5 možemo stvoriti i prilagođenu klasu sortiranja i koristiti je za naručivanje testnih slučajeva tijekom njihova izvršavanja.
=> Ovdje pogledajte vodič za početnike JUnit-a.
Preporučena literatura
- JUnit testovi: Kako napisati JUnit test slučajeve s primjerima
- Popis JUnit napomena: JUnit 4 vs JUnit 5
- JUnit Ignore Test Case: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- JUnit Test Suite i test slučajevi filtriranja: JUnit 4 Vs JUnit 5
- Što je učvršćenje JUnit testa: Vodič uz primjere JUnit 4
- JUnit lekcije za početnike - što je JUnit testiranje
- Višestruki načini izvođenja JUnit testova
- Kako paralelno pokrenuti veliko izvršavanje testova na Appiumu