Een gids voor @RepeatedTest in Junit 5

1. Overzicht

In dit korte artikel gaan we kijken naar de @RTLnieuws annotatie geïntroduceerd in JUnit 5. Het biedt ons een krachtige manier om een ​​test te schrijven die we meerdere keren willen herhalen.

Als je meer wilt weten over JUnit 5, bekijk dan alstublieft onze andere artikelen waarin de basisprincipes en gids voor JUnit 5 worden uitgelegd.

2. Maven afhankelijkheden en instellingen

Het eerste dat moet worden opgemerkt, is dat JUnit 5 Java 8 nodig heeft om te kunnen werken. Dat gezegd hebbende, laten we eens kijken naar de Maven-afhankelijkheid:

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

Dit is de belangrijkste JUnit 5-afhankelijkheid die we moeten toevoegen om onze tests te schrijven. Bekijk hier de nieuwste versie van het artefact.

3. Een eenvoudig @RTLnieuws Voorbeeld

Het maken van een herhaalde test is eenvoudig - voeg gewoon het @RepeatedTest annotatie bovenop de testmethode:

@RepeatedTest (3) void repeatTest (TestInfo testInfo) {System.out.println ("Herhaalde test uitvoeren"); assertEquals (2, Math.addExact (1, 1), "1 + 1 moet gelijk zijn aan 2"); }

Merk op dat in plaats van standaard @Test annotatie gebruiken we @RTLnieuws voor onze unit-test. De bovenstaande test wordt drie keer uitgevoerd alsof dezelfde test drie keer is geschreven.

De testrapporten (de rapportbestanden of de resultaten op het tabblad JUnit van uw IDE) zullen alle uitvoeringen weergeven:

herhaling 1 van 3 (herhaalde test (TestInfo)) herhaling 2 van 3 (herhaalde test (Testinfo)) herhaling 3 van 3 (herhaalde test (Testinfo))

4. Levenscyclusondersteuning voor @RTLnieuws

Elke uitvoering van de @RepeatedTest zal zich gedragen als een normale @Test met volledige ondersteuning van de JUnit-testlevenscyclus. Dit betekent dat tijdens elke uitvoering de @BeforeEach en @Na elke methoden worden aangeroepen. Om dit te demonstreren, voegt u gewoon de juiste methoden toe aan de testklasse:

@BeforeEach void beforeEachTest () {System.out.println ("Before Every Test"); } @AfterEach void afterEachTest () {System.out.println ("Na elke test"); System.out.println ("====================="); }

Als we onze vorige test uitvoeren, worden de resultaten weergegeven op de console:

Voor elke test Herhaalde test uitvoeren Na elke test ===================== Voor elke test Herhaalde test uitvoeren Na elke test =========== ========== Voor elke test Herhaalde test uitvoeren Na elke test =====================

Zoals we kunnen zien, is de @BeforeEach en @Na elke methoden worden rond elke uitvoering aangeroepen.

5. Configureren van de testnaam

In het eerste voorbeeld hebben we geconstateerd dat de output van het testrapport geen identifiers bevat. Dit kan verder worden geconfigureerd met de naam attribuut:

@RepeatedTest (waarde = 3, naam = RepeatedTest.LONG_DISPLAY_NAME) void repeatTestWithLongName () {System.out.println ("Herhaalde test uitvoeren met lange naam"); assertEquals (2, Math.addExact (1, 1), "1 + 1 moet gelijk zijn aan 2"); }

De uitvoer bevat nu de naam van de methode samen met de herhalingsindex:

repeatTestWithLongName () :: herhaling 1 van 3 (herhaaldeTestWithLongName ()) herhaaldeTestWithLongName () :: herhaling 2 van 3 (herhaaldeTestWithLongName ()) herhaaldeTestWithLongName () :: herhaling 3 van 3 (herhaaldeTestWithLongName ())

Een andere optie is om te gebruiken Herhaalde test.SHORT_DISPLAY_NAME wat de korte naam van de test oplevert:

herhaling 1 van 3 (herhaaldeTestWithShortName ()) herhaling 2 van 3 (herhaaldeTestWithShortName ()) herhaling 3 van 3 (herhaaldeTestWithShortName ())

Als we echter onze aangepaste naam moeten gebruiken, is het heel goed mogelijk:

@RepeatedTest (waarde = 3, name = "Aangepaste naam {currentRepetition} / {totalRepetitions}") void repeatTestWithCustomDisplayName (TestInfo testInfo) {assertEquals (2, Math.addExact (1, 1), "1 + 1 moet gelijk zijn aan 2") ; }

De {currentRepetition} en {totalRepetitions} zijn de tijdelijke aanduidingen voor de huidige herhaling en het totale aantal herhalingen. Deze waarden worden tijdens runtime automatisch door JUnit geleverd en er is geen aanvullende configuratie vereist. De output is vrijwel wat we hadden verwacht:

Aangepaste naam 1/3 (herhaaldeTestWithCustomDisplayName ()) Aangepaste naam 2/3 (herhaaldeTestWithCustomDisplayName ()) Aangepaste naam 3/3 (herhaaldeTestWithCustomDisplayName ())

6. Toegang tot het HerhalingInfo

Los van de naam attribuut, biedt JUnit ook toegang tot de herhalingsmetadata in onze testcode. Dit wordt bereikt door een HerhalingInfo parameter aan onze testmethode:

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

De uitvoer bevat de huidige herhalingsindex voor elke uitvoering:

Herhaling # 1 Herhaling # 2 Herhaling # 3

De HerhalingInfo wordt geleverd door RepetitionInfoParameterResolver en is alleen beschikbaar in de context van @RepeatedTest.

7. Conclusie

In deze korte tutorial hebben we de @RepeatedTest annotatie geleverd door JUnit en verschillende manieren geleerd om het te configureren.

Vergeet niet de volledige broncode voor dit artikel te bekijken op GitHub.