Sprievodca po @RepeatedTest v Junite 5
1. Prehľad
V tomto rýchlom článku sa pozrieme na @RepeatedTest anotácia uvedená v JUnit 5. Poskytuje nám efektívny spôsob písania ľubovoľných testov, ktoré chceme opakovať niekoľkokrát.
Ak sa chcete dozvedieť viac informácií o JUnit 5, prečítajte si naše ďalšie články vysvetľujúce základné informácie a sprievodcu JUnit 5.
2. Závislosti a nastavenie Maven
Prvá vec, ktorú si treba uvedomiť, je, že JUnit 5 potrebuje na spustenie Javu 8. Po tomto, poďme sa pozrieť na závislosť Maven:
org.junit.jupiter test junit-jupiter-engine 5.7.0
Toto je hlavná závislosť JUnit 5, ktorú musíme pridať pri písaní našich testov. Najnovšiu verziu artefaktu nájdete tu.
3. Jednoduché @RepeatedTest Príklad
Vytvorenie opakovaného testu je jednoduché - stačí pridať @RepeatedTest anotácia navrchu skúšobnej metódy:
@RepeatedTest (3) void repeatTest (TestInfo testInfo) {System.out.println ("Vykonanie opakovaného testu"); assertEquals (2, Math.addExact (1, 1), "1 + 1 by sa mal rovnať 2"); }
Všimnite si, že namiesto štandardu @Test anotáciu, ktorú používame @RepeatedTest pre náš test jednotky. Vyššie uvedený test sa vykoná trikrát akoby ten istý test bol napísaný trikrát.
V protokole o teste (súbory protokolu alebo výsledky na karte JUnit vášho IDE) sa zobrazia všetky vykonania:
opakovanie 1 z 3 (opakovaný test (TestInfo)) opakovanie 2 z 3 (opakovaný test (TestInfo)) opakovanie 3 z 3 (opakovaný test (TestInfo))
4. Podpora životného cyklu pre @RepeatedTest
Každá poprava @RepeatedTest bude sa správať ako štamgast @Test s plnou podporou životného cyklu testu JUnit. To znamená, že počas každej popravy @BeforeEach a @AfterEach metódy sa budú volať. Na preukázanie toho stačí pridať príslušné metódy do testovacej triedy:
@BeforeEach void beforeEachTest () {System.out.println ("Pred každým testom"); } @AfterEach void afterEachTest () {System.out.println ("Po každom teste"); System.out.println ("====================="); }
Ak spustíme náš predchádzajúci test, výsledky sa zobrazia na konzole:
Pred každým testom Vykonanie opakovaného testu Po každom teste ===================== Pred každým testom Vykonanie opakovaného testu po každom teste ============ ========== Pred každým testom Vykonanie opakovaného testu po každom teste ======================
Ako vidíme, @BeforeEach a @AfterEach okolo každej exekúcie sa volajú metódy.
5. Konfigurácia názvu testu
V prvom príklade sme pozorovali, že výstup správy o teste neobsahuje žiadne identifikátory. Toto je možné ďalej konfigurovať pomocou názov atribút:
@RepeatedTest (value = 3, name = RepeatedTest.LONG_DISPLAY_NAME) void repeatTestWithLongName () {System.out.println ("Vykonanie opakovaného testu s dlhým menom"); assertEquals (2, Math.addExact (1, 1), "1 + 1 by sa mal rovnať 2"); }
Výstup bude teraz obsahovať názov metódy spolu s indexom opakovania:
repeatTestWithLongName () :: opakovanie 1 z 3 (opakovanéTestWithLongName ()) opakovanéTestWithLongName () :: opakovanie 2 z 3 (opakovanéTestWithLongName ()) opakovanéTestWithLongName () :: opakovanie 3 z 3 (opakovanéTestWithLongName ())
Ďalšou možnosťou je použitie Opakovaný test.SHORT_DISPLAY_NAME ktorý vytvorí krátky názov testu:
opakovanie 1 z 3 (opakovanéTestWithShortName ()) opakovanie 2 z 3 (opakovanéTestWithShortName ()) opakovanie 3 z 3 (opakovanéTestWithShortName ())
Ak však potrebujeme použiť náš prispôsobený názov, je to veľmi možné:
@RepeatedTest (value = 3, name = "Vlastný názov {currentRepetition} / {totalRepetitions}") void ; }
The {currentRepetition} a {totalRepetitions} sú zástupné symboly pre aktuálne opakovanie a celkový počet opakovaní. Tieto hodnoty poskytuje JUnit automaticky za behu a nevyžaduje sa žiadna ďalšia konfigurácia. Výstup je do značnej miery taký, aký sme očakávali:
Vlastný názov 1/3 (opakovanéTestWithCustomDisplayName ()) Vlastné meno 2/3 (opakovanéTestWithCustomDisplayName ()) Vlastné meno 3/3 (opakovanéTestWithCustomDisplayName ())
6. Prístup k RepetitionInfo
Okrem názov atribút JUnit poskytuje prístup k metaúdajom opakovania aj v našom testovacom kóde. To sa dosiahne pridaním a RepetitionInfo parameter našej testovacej metódy:
@RepeatedTest (3) void repeatTestWithRepetitionInfo (RepetitionInfo repetitionInfo) {System.out.println ("Repetition #" + repetitionInfo.getCurrentRepetition ()); assertEquals (3, repetitionInfo.getTotalRepetitions ()); }
Výstup bude obsahovať aktuálny index opakovania pre každé spustenie:
Opakovanie č. 1 Opakovanie č. 2 Opakovanie č. 3
The RepetitionInfo poskytuje RepetitionInfoParameterResolver a je k dispozícii iba v kontexte @RepeatedTest.
7. Záver
V tomto rýchlom výučbe sme preskúmali @RepeatedTest anotáciu poskytnutú JUnitom a naučila sa rôzne spôsoby jej konfigurácie.
Nezabudnite si pozrieť celý zdrojový kód tohto článku na GitHub.