En guide til @RepeatedTest i 5. juni

1. Oversigt

I denne hurtige artikel skal vi se på @RepeatedTest kommentar introduceret i JUnit 5. Det giver os en effektiv måde at skrive enhver test, som vi vil gentage flere gange.

Hvis du vil lære mere om JUnit 5, skal du tjekke vores andre artikler, der forklarer det grundlæggende og guide til JUnit 5.

2. Maven-afhængigheder og opsætning

Den første ting at bemærke er, at JUnit 5 har brug for Java 8 for at køre. Når det er sagt, lad os se på Maven-afhængigheden:

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

Dette er den vigtigste afhængighed af JUnit 5, som vi skal tilføje for at skrive vores tests. Tjek den seneste version af artefakten her.

3. En enkel @RepeatedTest Eksempel

Oprettelse af en gentagen test er enkel - bare tilføj @RepeatedTest kommentar oven på testmetoden:

@RepeatedTest (3) ugyldig repeatTest (TestInfo testInfo) {System.out.println ("Udførelse af gentagen test"); assertEquals (2, Math.addExact (1, 1), "1 + 1 skal svare til 2"); }

Bemærk, at i stedet for standard @Prøve kommentar, vi bruger @RepeatedTest til vores enhedstest. Ovenstående test udføres tre gange som om den samme test blev skrevet tre gange.

Testrapporterne (rapportfilerne eller resultaterne i fanen JUnit i din IDE) viser alle henrettelser:

gentagelse 1 af 3 (repeatTest (TestInfo)) gentagelse 2 af 3 (repeatTest (TestInfo)) gentagelse 3 af 3 (repeatTest (TestInfo))

4. Livscyklusstøtte til @RepeatedTest

Hver udførelse af @RepeatedTest vil opføre sig som en almindelig @Prøve have fuld JUnit test livscyklus support. Det betyder, at under hver udførelse, @BeforeEach og @AfterEach metoder kaldes. For at demonstrere dette skal du blot tilføje de relevante metoder i testklassen:

@BeforeEach ugyldigt førEachTest () {System.out.println ("Før hver test"); } @AfterEach ugyldigt efterEachTest () {System.out.println ("Efter hver test"); System.out.println ("======================="); }

Hvis vi kører vores tidligere test, vises resultaterne på konsollen:

Før hver test udfører gentagen test Efter hver test ====================== Før hver test udfører gentagen test efter hver test =========== ========== Før hver test Udfører gentagen test Efter hver test ======================

Som vi kan se, er @BeforeEach og @AfterEach metoder kaldes omkring hver udførelse.

5. Konfiguration af testnavnet

I det første eksempel har vi observeret, at output fra testrapporten ikke indeholder nogen identifikatorer. Dette kan konfigureres yderligere ved hjælp af navn attribut:

@RepeatedTest (værdi = 3, navn = RepeatedTest.LONG_DISPLAY_NAME) ugyldig repeatTestWithLongName () {System.out.println ("Udførelse af gentagen test med langt navn"); assertEquals (2, Math.addExact (1, 1), "1 + 1 skal svare til 2"); }

Outputtet indeholder nu metodens navn sammen med gentagelsesindekset:

repeatTestWithLongName () :: gentagelse 1 af 3 (repeatTestWithLongName ()) repeatTestWithLongName () :: gentagelse 2 af 3 (repeatTestWithLongName ()) repeatTestWithLongName () :: gentagelse 3 af 3 (repeatTestWithLongName ())

En anden mulighed er at bruge RepeatedTest.SHORT_DISPLAY_NAME der producerer testens korte navn:

gentagelse 1 af 3 (repeatTestWithShortName ()) gentagelse 2 af 3 (repeatTestWithShortName ()) gentagelse 3 af 3 (repeatTestWithShortName ())

Hvis vi dog skal bruge vores tilpassede navn, er det meget muligt:

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

Det {nuværende gentagelse} og {totalRepetitions} er pladsholderne for den aktuelle gentagelse og det samlede antal gentagelser. Disse værdier leveres automatisk af JUnit ved kørselstiden, og der kræves ingen yderligere konfiguration. Outputtet er stort set det, vi forventede:

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

6. Adgang til RepetitionInfo

Bortset fra navn attribut giver JUnit også adgang til gentagelsesmetadataene i vores testkode. Dette opnås ved at tilføje en RepetitionInfo parameter til vores testmetode:

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

Outputtet indeholder det aktuelle gentagelsesindeks for hver udførelse:

Gentagelse nr. 1 Gentagelse nr. 2 Gentagelse nr. 3

Det RepetitionInfo leveres af RepetitionInfoParameterResolver og er kun tilgængelig i forbindelse med @RepeatedTest.

7. Konklusion

I denne hurtige vejledning undersøgte vi @RepeatedTest kommentar fra JUnit og lærte forskellige måder at konfigurere den på.

Glem ikke at tjekke den fulde kildekode til denne artikel på GitHub.


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