Redoslijed ispitivanja u JUnit-u

1. Pregled

Prema zadanim postavkama, JUnit pokreće testove koristeći deterministički, ali nepredvidljiv redoslijed (MethodSorters.DEFAULT).

U većini slučajeva to je ponašanje sasvim u redu i prihvatljivo; ali postoje slučajevi kada moramo izvršiti određeno naređenje.

2. Redoslijed testa u JUnit 5

U JUNITU 5, možemo koristiti @TestMethodOrder za kontrolu redoslijeda izvršavanja testova.

Možemo koristiti svoje MethodOrderer, kao što ćemo vidjeti kasnije, ili možemo odabrati jednog od tri ugrađena naručitelja:

  1. @Narudžba Bilješka
  2. Alfanumerički Narudžba
  3. Slučajni poredak

2.1. Koristiti @Narudžba Bilješka

Možemo koristiti @Narudžba napomena za provođenje testova koji se izvode određenim redoslijedom.

U sljedećem primjeru metode će se izvoditi ovim redoslijedom - firstTest (), onda drugi test (), i konačno, thirdTest ():

@TestMethodOrder (OrderAnnotation.class) javna klasa OrderAnnotationUnitTest {private static StringBuilder output = new StringBuilder (""); @Test @Order (1) public void firstTest () {output.append ("a"); } @Test @Order (2) public void secondTest () {output.append ("b"); } @Test @Order (3) public void thirdTest () {output.append ("c"); } @AfterAll javna statička praznina assertOutput () {assertEquals (output.toString (), "abc"); }}

2.2. Koristeći Alfanumerički Narudžba

Također možemo pokretati testove na temelju njihovih imena alfanumeričkim redoslijedom:

@TestMethodOrder (Alphanumeric.class) javna klasa AlphanumericOrderUnitTest {private static StringBuilder output = new StringBuilder (""); @Test public void myATest () {output.append ("A"); } @Test public void myBTest () {output.append ("B"); } @Test public void myaTest () {output.append ("a"); } @AfterAll javna statička praznina assertOutput () {assertEquals (output.toString (), "ABa"); }}

Imajte na umu da je alfanumerički redoslijed osjetljiv na velika i mala slova, pa su velika slova na prvom mjestu, a zatim mala.

Testovi će se izvoditi ovim redoslijedom: myATest (), myBTest () i konačno myaTest ().

2.3. Korištenje prilagođene narudžbe

Konačno, možemo koristiti vlastiti prilagođeni redoslijed primjenom MethodOrderer sučelje.

U našem CustomOrder, testove ćemo naručiti na temelju njihovih imena, alfanumeričkim redoslijedom koji ne razlikuje velika i mala slova:

javna klasa CustomOrder implementira MethodOrderer {@Override public void orderMethods (MethodOrdererContext context) {context.getMethodDescriptors (). sort ((MethodDescriptor m1, MethodDescriptor m2) -> m1.getMethod (). getName (). compareToIgnoreCase (m2.get .getName ())); }}

Zatim ćemo upotrijebiti CustomOrder za pokretanje istih testova iz našeg prethodnog primjera ovim redoslijedom - myATest (), myaTest (), i konačno, myBTest ():

@TestMethodOrder (CustomOrder.class) javna klasa CustomOrderUnitTest {// ... @AfterAll javna statička praznina assertOutput () {assertEquals (output.toString (), "AaB"); }}

3. Redoslijed testa u JUnit-u 4

Ako i dalje koristite JUnit 4, API-ji za naručivanje testova malo se razlikuju.

Prođimo kroz mogućnosti da to postignemo i u prethodnim verzijama.

3.1. Koristeći MethodSorters.DEFAULT

Ova zadana strategija uspoređuje metode ispitivanja pomoću njihovih hash kodova. U slučaju sudara hash-a koristi se leksikografski poredak:

@FixMethodOrder (MethodSorters.DEFAULT) javna klasa DefaultOrderOfExecutionTest {private static StringBuilder output = new StringBuilder (""); @Test javna praznina secondTest () {output.append ("b"); } @Test javna void thirdTest () {output.append ("c"); } @Test javna void firstTest () {output.append ("a"); } @AfterClass javna statička praznina assertOutput () {assertEquals (output.toString (), "cab"); }}

Kada izvršimo testove u gornjoj klasi, vidjet ćemo da su svi prošli, uključujući assertOutput ().

3.2. Koristeći MethodSorters.JVM

Druga strategija naručivanja je MethodSorters.JVMova strategija koristi prirodni JVM poredak - koji može biti različit za svako pokretanje:

@FixMethodOrder (MethodSorters.JVM) javna klasa JVMOrderOfExecutionTest {// isto kao gore}

Svaki put kad izvršimo testove u ovoj klasi, dobit ćemo drugačiji rezultat.

3.3. Koristeći MethodSorters.NAME_ASCENDING

Konačno, ova se strategija može koristiti za izvođenje testova prema njihovom leksikografskom redoslijedu:

@FixMethodOrder (MethodSorters.NAME_ASCENDING) javna klasa NameAscendingOrderOfExecutionTest {// isto kao gore @AfterClass javna statička praznina assertOutput () {assertEquals (output.toString (), "abc"); }}

Slično tome, kada izvršavamo testove u ovoj klasi, vidimo da svi oni prolaze, uključujući assertOutput (), koji potvrđuje nalog za izvršenje koji smo postavili uz napomenu.

4. Zaključak

U ovom smo brzom uputstvu prošli načine postavljanja naloga za izvršenje dostupnog u JUnit-u.

Kao i uvijek, primjeri korišteni u ovom članku mogu se naći na GitHubu.


$config[zx-auto] not found$config[zx-overlay] not found