En guide til @RepeatedTest i juni 5

1. Oversikt

I denne raske artikkelen skal vi se på @RepeatedTest kommentar introdusert i JUnit 5. Det gir oss en kraftig måte å skrive en test vi vil gjenta flere ganger.

Hvis du vil lære mer om JUnit 5, kan du sjekke våre andre artikler som forklarer det grunnleggende og guide til JUnit 5.

2. Maven-avhengigheter og oppsett

Den første tingen å merke seg er at JUnit 5 trenger Java 8 for å kjøre. Når det er sagt, la oss ta en titt på Maven-avhengigheten:

 org.junit.jupiter junit-jupiter-engine 5.7.0 test 

Dette er den viktigste avhengigheten av JUnit 5 som vi trenger å legge til for å skrive testene våre. Sjekk ut den nyeste versjonen av gjenstanden her.

3. En enkel @RepeatedTest Eksempel

Det er enkelt å lage en gjentatt test - bare legg til @RepeatedTest kommentar på toppen av testmetoden:

@RepeatedTest (3) ugyldig repeatTest (TestInfo testInfo) {System.out.println ("Utfører gjentatt test"); assertEquals (2, Math.addExact (1, 1), "1 + 1 skal være lik 2"); }

Merk at i stedet for standard @Test kommentar, bruker vi @RepeatedTest for enhetstesten vår. Ovennevnte test utføres tre ganger som om den samme testen ble skrevet tre ganger.

Testrapportene (rapportfilene eller resultatene i JUnit-fanen i IDE-en din) viser alle henrettelsene:

repetisjon 1 av 3 (repeatTest (TestInfo)) repetisjon 2 av 3 (repeatTest (TestInfo)) repetisjon 3 av 3 (repeatTest (TestInfo))

4. Livssyklusstøtte for @RepeatedTest

Hver utførelse av @RepeatedTest vil oppføre seg som en vanlig @Test har full JUnit-test livssyklusstøtte. Betydning at, under hver henrettelse, @BeforeEach og @EfterEach metoder vil bli kalt. For å demonstrere dette er det bare å legge til de riktige metodene i testklassen:

@BeforeEach ugyldig førEachTest () {System.out.println ("Før hver test"); } @AfterEach ugyldig etterEachTest () {System.out.println ("Etter hver test"); System.out.println ("======================="); }

Hvis vi kjører vår forrige test, vil resultatene vises på konsollen:

Før hver test Utfører gjentatt test Etter hver test ====================== Før hver test Utfører gjentatt test Etter hver test =========== ========== Før hver test Utfører gjentatt test Etter hver test ======================

Som vi kan se, er @BeforeEach og @EfterEach metoder kalles rundt hver utførelse.

5. Konfigurere testnavnet

I det første eksemplet har vi observert at utdataene fra testrapporten ikke inneholder noen identifikatorer. Dette kan konfigureres videre ved hjelp av Navn Egenskap:

@RepeatedTest (verdi = 3, navn = RepeatedTest.LONG_DISPLAY_NAME) ugyldig repeatTestWithLongName () {System.out.println ("Utfører gjentatt test med langt navn"); assertEquals (2, Math.addExact (1, 1), "1 + 1 skal være lik 2"); }

Utgangen vil nå inneholde metodenavnet sammen med repetisjonsindeksen:

repeatTestWithLongName () :: repetisjon 1 av 3 (repeatTestWithLongName ()) repeatTestWithLongName () :: repetisjon 2 av 3 (repeatTestWithLongName ()) repeatTestWithLongName () :: repetisjon 3 av 3 (repeatTestWithLongName ())

Et annet alternativ er å bruke RepeatedTest.SHORT_DISPLAY_NAME som vil gi testens korte navn:

repetisjon 1 av 3 (repeatTestWithShortName ()) repetisjon 2 av 3 (repeatTestWithShortName ()) repetisjon 3 av 3 (repeatTestWithShortName ())

Hvis vi imidlertid trenger å bruke vårt tilpassede navn, er det veldig mye mulig:

@RepeatedTest (value = 3, name = "Custom name {currentRepetition} / {totalRepetitions}") ugyldig repeatTestWithCustomDisplayName (TestInfo testInfo) {assertEquals (2, Math.addExact (1, 1), "1 + 1 skal være lik 2") ; }

De {currentRepetition} og {totalRepetitions} er plassholderne for gjeldende repetisjon og totalt antall repetisjoner. Disse verdiene leveres automatisk av JUnit under kjøretiden, og det kreves ingen ekstra konfigurasjon. Resultatet er stort sett det vi forventet:

Egendefinert navn 1/3 (repeatTestWithCustomDisplayName ()) Egendefinert navn 2/3 (repeatTestWithCustomDisplayName ()) Egendefinert navn 3/3 (repeatTestWithCustomDisplayName ())

6. Få tilgang til RepetitionInfo

Bortsett fra Navn attributt, gir JUnit også tilgang til repetisjonsmetadataene i testkoden vår. Dette oppnås ved å legge til en RepetitionInfo parameter til testmetoden vår:

@RepeatedTest (3) ugyldig repeatTestWithRepetitionInfo (RepetitionInfo repetitionInfo) {System.out.println ("Repetition #" + repetitionInfo.getCurrentRepetition ()); assertEquals (3, repetitionInfo.getTotalRepetitions ()); }

Utgangen vil inneholde gjeldende repetisjonsindeks for hver av utførelsen:

Repetisjon # 1 Repetisjon # 2 Repetisjon # 3

De RepetitionInfo er levert av RepetitionInfoParameterResolver og er bare tilgjengelig i sammenheng med @RepeatedTest.

7. Konklusjon

I denne raske opplæringen utforsket vi @RepeatedTest kommentar gitt av JUnit og lærte forskjellige måter å konfigurere den på.

Ikke glem å sjekke hele kildekoden for denne artikkelen på GitHub.


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