junit test suite filtering test cases
Tento výukový program bude diskutovať o tom, čo je testovacia sada JUnit, ako vytvoriť testovaciu sadu a ako filtrovať testovacie prípady v JUnit 4 vs JUnit 5:
O tom, ako preskočiť určité testovacie prípady počas vykonávania, sme sa dozvedeli v našom predchádzajúcom tutoriáli. Dozvedeli sme sa tiež o rôznych anotáciách použitých v JUnit 4 a JUnit 5.
V tomto tutoriále sa dozvieme:
- Čo je to testovací balík?
- Ako vytvoríme testovaciu sadu zapuzdrením viacerých testovacích prípadov do skupiny a vykonaním sady pomocou triedy JUnitCore?
=> Navštívte tu exkluzívnu sériu výučbových kurzov JUnit.
Čo sa dozviete:
JUnit Test Suite
JUnit 4: @RunWith, @SuiteClasses Annotations
Tutoriál Viaceré spôsoby vykonávania testov JUnit ilustroval, ako vytvoriť testovaciu sadu v systéme Windows JUnit 4.
Anotácie @RunWith a @SuiteClasses nám pomohli vytvoriť testovaciu skupinu zoskupením viacerých testovacích tried JUnit. Následne spustený súbor s triedou JUnitCore.runclasses () vyvolal vykonanie vytvorenej testovacej sady.
V tejto časti nájdete všetky podrobnosti o pracovnom postupe spolu so skutočným kódom pre JUnit 4.
JUnit 5: @RunWith, @SelectClasses, @SelectPackages anotácie
Vytvorenie testovacej sady v JUnit 5 je dosť podobné tomu, čo máme v JUnit 4. Takže, aký je potom rozdiel?
# 1) V JUnit 4 , máme Suite.class, ktorý sa odovzdáva ako parameter do poznámky @RunWith s cieľom podpory vytvorenia testovacej sady, zatiaľ čo JUnit 5 používa rovnakú anotáciu @RunWith, ale so vstupným parametrom ako JUnitPlatform.class namiesto Suita.trieda .
Riadok kódu v JUnit 5 teda vyzerá @RunWith (JUnitPlatform.class). Toto je anotácia, ktorá je súčasťou vášho podprojektu JUnit Platform.
#dva) V JUnit 4 , používame @SuiteClasses na zoskupenie viacerých tried JUnit oddelených čiarkou, keď ste v systéme JUnit 5 máme:
- Anotácia @SelectClasses to je ekvivalent k @SuiteClasses v JUnit 4 na zoskupenie viacerých tried JUnit.
- @SelectPackages anotácia sa používa na zoskupenie viacerých testov z balíka (-ov). Musíte zadať hodnotu poľa reťazca, ktorá predstavuje balík, ktorý chcete zahrnúť.
Inými slovami teda
- Ak chcete zoskupiť testovacie prípady z jedného balíka, umožňuje vám to JUnit 5.
- Alebo v prípade, že chcete zoskupiť testovacie prípady z viacerých balíkov, podporuje to aj JUnit 5. Tu si treba zapamätať, že testy v rámci všetkých čiastkových balíkov spomínaného balíka sú predvolene zahrnuté aj do testovacej sady.
JUnit 5: Rôzne scenáre / príklady
Vytvorenie testovacej skupiny zoskupujúcej viac testovacích tried
Útržok kódu je uvedený nižšie:
@RunWith(JUnitPlatform.class) @SelectClasses({JUnit5TestCase1.class, JUnit5TestCase2.class }) public class JUnitTestSuite { }
Vytváranie testovacej sady pre jeden balík
Útržok kódu je uvedený nižšie:
@RunWith(JUnitPlatform.class) @SelectPackages({“ demo.tests “}) public class JUnit5TestSuite { }
Poznámka :
- Povedať demo.testy balíček má podbalenie demo.testy.subtesty.
- Kód @SelectPackages ({„demo.tests“}) zahrnie všetky testy z podbalenia tiež do testovacej sady; predvolene.
- Keby si uviedol @SelectPackages ({„demo.tests.subtests“}) , testovacie prípady v podbalení demo.testy.subtesty budú zahrnuté iba do testovacej sady, zatiaľ čo testy z jej nadradeného balíka, t. demo.testy by neboli zahrnuté.
Vytváranie testovacej sady pre viac balíkov
Útržok kódu na vytvorenie testovacej sady pre viac balíkov oddelené čiarkou v JUnit 5 - bude vyzerať nasledovne:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests”, “demo1.tests”, “demo2.tests”}) public class JUnit5TestSuite { }
Filtračná testovacia sada - JUnit 4 proti JUnit 5
Niekedy musíme odfiltrovať testovacie prípady a vykonať konkrétnu sadu testov podľa našich potrieb. Môže napríklad existovať sada testov určených pre regresné testovanie, samostatná sada pre testovanie jednotiek a samostatná sada testovacích prípadov pre testovanie dymu.
Musíme vylúčiť alebo zahrnúť testovacie prípady z určitých balíkov alebo tried alebo kategórií. Filtrovanie alebo označovanie testov z jedného balíka je jedinou možnosťou v JUnit4.
V porovnaní s JUnit 4 má JUnit 5 dobrú sadu funkcií na podporu tejto potreby filtrovania testovacích prípadov z jedného balíka alebo viacerých balíkov a čiastkových balíkov podľa vašich meniacich sa požiadaviek.
JUnit 4 - @Category, @IncludeCategory, @ExcludeCategory
Testovacie prípady v JUnit 4 je možné rozdeliť do rôznych kategórií. Tieto kategórie je možné vylúčiť alebo zahrnúť počas používania testovacej sady. Anotácie @Category, @IncludeCategory a @ExcludeCategory sú podporované od JUnit 4.12 a novších.
Kroky na vysokej úrovni na vytvorenie filtrov založených na kategórii alebo kategóriách sú tieto:
# 1) Vytvorte značkovacie rozhranie, ktoré hrá v kategórii úlohu.
#dva) Anotujte testovacie metódy tried, ktoré majú byť zahrnuté v SuiteClasses s @Category a názov kategórie.
# 3) V súbore testovacej sady použite anotáciu @IncludeCategory s názvom kategórie tak, aby zahŕňala testy patriace do konkrétnej kategórie.
# 4) V súbore testovacej sady použite anotáciu @ExcludeCategory s názvom kategórie na ich vylúčenie.
# 5) Anotáciu @Category je možné použiť aj na úrovni testu alebo triedy. Ak sa anotácia aplikuje na úrovni testu, potom sa daný test označí danou kategóriou, zatiaľ čo ak je anotácia na úrovni triedy, všetky testy v rámci triedy sa označia danou kategóriou.
Pozrime sa na niekoľko ďalších podrobností, aby sme pochopili praktickú implementáciu kategorizácie testov a ich filtrovania na vykonanie:
Krok 1:
Začneme vytvorením a značkovacie rozhranie ktorá bude hrať úlohu a kategória pre skúšobné metódy. Tu vytvoríme kategóriu s názvom UnitTest . Kód je veľmi jednoduchý. Prečítajte si kód uvedený nižšie.
Kód pre UnitTest.java
package demo.tests; public interface UnitTest {}
Krok 2:
Kategóriu označíme na úroveň testovacej metódy v triede JUnitTestCase1.java . Ak chcete pridať testovací prípad junitMethod1 () do kategórie UnitTest, musíme testovaciu metódu anotovať pomocou @Category (UnitTest.class) .
Týmto sa do kategórie UnitTest pridá testovacia metóda. Ostatné testovacie metódy (ak existujú) nie sú označené v kategórii, pokiaľ metódy nie sú anotované kategóriou.
Aby v našom kóde fungovala anotácia @Category, musíme balíček importovať org.junit.experimentálne.kategórie.Kategórie
Fragment kódu z JUnitTestCase1.java:
@Category(UnitTest.class) @Test public void junitMethod1(){ int Value2=9000; Assert. assertEquals (Value1, Value2); }
Alternatívne môže testovacia metóda tiež patriť do viacerých kategórií Napr. : @Category (UnitTest.class, SmokeTest.class)
Krok 3:
Teraz by som označil kategóriu na úrovni triedy v triede JUnitTestCase2.java . Rovnaké vyhlásenie, ktoré bolo pridané na úrovni testovacej metódy v predchádzajúcom kroku, bude pridané aj do aktuálneho súboru triedy.
Upozorňujeme, že tu pridáme vyhlásenie na úrovni triedy. Týmto krokom urobíte všetky testovacie metódy v súbore súčasťou súboru UnitTest Kategória.
Fragment kódu z JUnitTestCase2.java:
@Category(UnitTest.class) @Test public class JUnitTestCase2 { public String stringValue='JUnit';
Krok 4:
Ako otvorím súbor bin v systéme Windows 10
Teraz, keď boli naše požadované testovacie prípady kategorizované do kategórie UnitTest, teraz uvidíme, ako ich pridať do testovacej sady ich filtrovaním na základe kategórie. Urobíme určité zmeny kódu v JUnitTestSuite.class demonštrovať to.
- Kategórie.trieda bude odovzdaný ako parameter do anotácie @RunWith.
- @ Suite.SuiteClasses prevezme pole reťazcov testovacích tried.
- Anotácia @ Categories.IncludeCategory ako parameter budete potrebovať UnitTest.class.
- Toto vyhlásenie nám pomôže vyfiltrovať celú sadu a spustiť iba tie testovacie prípady zo sady, ktoré patria do tejto kategórie.
- Kategórie.trieda potrebuje balík org.junit.experimentálne.kategórie. Kategórie dovážať.
Fragment kódu pre JunitTestSuite.java
@RunWith(Categories.class) @Categories.IncludeCategory(UnitTest.class) @Suite.SuiteClasses({JUnitTestCase1.class, JUnitTestCase2.class}) public class JUnitTestSuite {
Anotácia @ Categories.IncludeCategory možno napísať aj ako @IncludeCategory. Môžete tiež vytvoriť viac rozhraní (kategórií) a anotovať triedy / testovacie metódy viacerými kategóriami oddelenými čiarkou. Nasledujúci príklad odfiltruje testy patriace do kategórie - kategória 1 a kategória 2.
Príklad: @IncludeCategory ({Category1.class, Category2.class})
Podobné pravidlá platia @ Kategórie. VylúčiťKategóriu / @ExcludeCategory vylúčiť počas skúšobnej prevádzky skúšobné metódy z kategórie alebo kategórií.
JUnit 5 - @IncludeTags, @ExcludeTags, @IncludePackages, @ExcludePackages, @IncludeClassNamePatterns, @ExcludeClassNamePatterns
JUnit 5 je dodávaný s viacerými prístupmi k organizácii a filtrovaniu testovacích prípadov.
JUnit 5 - @IncludeTags, @ExcludeTags
# 1) Rovnako ako JUnit 4 má @IncludeCategory a @ExcludeCategory anotácie na podporu filtrovania testovacích prípadov na vykonanie.
#dva) JUnit 5 má na dosiahnutie rovnakého účelu anotácie @IncludeTags a @ExcludeTags.
# 3) JUnit 4 označuje testovacie prípady, ktoré sa majú usporiadať do konkrétnej kategórie, zatiaľ čo JUnit 5 sa týka označenia testovacích prípadov konkrétnou značkou, aby sa umožnilo filtrovanie testovacích prípadov na vykonanie.
Kroky na vysokej úrovni na vytvorenie filtrov založených na značkách sú tieto:
- Anotujte testovacie metódy balíkov, ktoré majú byť zahrnuté do balíka @SelectPackages, pomocou @Tag a používateľom definovaný názov značky. Jedna trieda môže mať rôzne značky pre rôzne testovacie metódy.
- Môžete tiež anotovať @Tag na úrovni triedy, aby boli označené všetky testy v triede.
- V súbore testovacej sady použite anotáciu @IncludeTags s názvom štítku, aby zahŕňal testy patriace k konkrétnemu štítku.
- V súbore testovacej sady použite anotáciu @ExcludeTags s názvom značky na ich vylúčenie z testovacej sady.
Teraz si ukážeme podrobný príklad toho, ako prakticky implementovať filtrovanie v JUnit 5.
Krok 1 : Označujeme testovaciu metódu v JUnit5TestCase1.java názvom tagu „Regresia“
Fragment kódu z JUnit5TestCase1.java:
@Tag(“Regression”) @Test public void junitMethod1(){
Krok 2 : Označujeme testovaciu metódu v JUnit5TestCase2.java názvom tagu „SmokeTest“.
Fragment kódu z JUnit5TestCase2.java:
@Tag(“SmokeTest”) @Test public void junitMethod2(){
Krok 3: Teraz, keď boli testovacie metódy označené, aktualizujeme teraz JUnit5TestSuite.java, aby sme pre testy pridali príslušné filtre podľa značiek. Nasledujúci kód obsahuje všetky testy označené ako „Regresia“ a vylučuje všetky testy označené ako „SmokeTest“.
Fragment kódu z JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeTags(“Regression”) @ExcludeTags(“SmokeTest”) public class JUnit5TestSuite { }
JUnit 5 - @IncludePackages, @ExcludePackages
To už vieme, keď odovzdáme názov balíka v priečinku @SelectPackages anotácia, testy v čiastkových balíkoch balíka sa tiež pridajú do testovacej sady.
Mohli by existovať určité čiastkové balíčky, ktoré chceme zahrnúť do našej testovacej sady, zatiaľ čo niekoľko ďalších čiastkových balíkov, ktoré nechceme alebo nemusia byť relevantné, aby boli zahrnuté do našej sady.
Toto je uľahčené anotáciami @IncludePackages a @ExcludePackages v JUnit 5.
Predpokladajme, že máme balíček ‘demo.tests’, ktorý má tri čiastkové balíčky, t. J. Subpackage1, subpackage2 a subpackage 3 so svojimi testovacími triedami v každom z nasledujúcich balíkov.
Pozrime sa na úryvok kódu z JUnit5TestSuite.java, aby sme si predstavili, ako zahrnúť a vylúčiť balík.
Scenár č. 1: Použite filter na zahrnutie testovacích prípadov iba z podbalíčka1.
Nasledujúci kód obsahuje všetky testy zo všetkých tried JUnit v balíku demo.tests.subpackage1, vylučuje však všetky testy priamo pod balíkom demo.test a tie, ktoré sa nachádzajú v balíku subpackage2 a subpackage3.
Fragment kódu z JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludePackages(“demo.tests.subpackage1”) public class JUnit5TestSuite { }
Scenár č. 2: Použite filter na vylúčenie testovacích prípadov iba z podbalíčka balíka3.
Nasledujúci kód vylučuje všetky testy z tried JUnit v balíku - demo.tests.subpackage3, avšak sada obsahuje všetky testy priamo pod balíkom demo.test a tie, ktoré sa nachádzajú v balíku subpackage1 a subpackage2.
Fragment kódu z JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludePackages(“demo.tests.subpackage3”) public class JUnit5TestSuite { }
JUnit 5 - @IncludeClassNamePatterns, @ExcludeClassNamePatterns
Ak chcete z balíka zahrnúť alebo vylúčiť určité triedy zodpovedajúce konkrétnemu regulárnemu výrazu, anotácie @ ZahrnúťClassNameVzory a @ ExcludeClassnameVzory možno použiť v súbore triedy testovacej sady.
Pozrime sa teraz na ilustráciu prostredníctvom aktualizácie kódu v JUnit5TestSuite.java
Scenár č. 1:
Nižšie uvedený kód obsahuje triedy, ktoré končia „Ctests“ z balíka demo.tests
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeClassNamePatterns({'^.*CTests?$'})
Scenár č. 2:
Teraz vylúčime tie triedy, ktoré zasvätiť s testom „STest“ z demo.testov balíka
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludeClassNamePatterns({'^STest.*$'})
Scenár č. 3:
Ako kritériá filtra možno tiež odovzdať viac regulárnych výrazov. Nasledujúci kód uvádza dva rôzne regulárne výrazy oddelené znakom „ ALEBO ”Operátor. Štrbinová tyč | je tu operátor OR.
bezplatný zálohovací softvér pre Windows 8.1
Kód filtruje triedy zasvätenie s Test ( Test. *) alebo končiaci s Testy (*. Testy?) a zahŕňa tieto triedy v testovacej súprave ako anotáciu @IncludeClassNamePatterns.
Poznámka: Ak sa plne kvalifikovaný názov triedy zhoduje s aspoň jedným vzorom, potom sa trieda načíta podľa anotácie @IncludeClassNamePatterns alebo @ExcludeClassNamePatterns.
@RunWith (JUnitPlatform.class)
@SelectPackages ({„demo.tests“})
@IncludeClassNamePatterns (. * Testy?) $ “)
Časté otázky o testovacích prípadoch filtrovania JUnit
Tu je otázka, ktorá vám možno už dlhšiu dobu pretrváva v mysli.
Otázka 1) Aký je rozdiel medzi vypnutím / ignorovaním testu a odfiltrovaním testu? Nemôže niektorá z funkcií pomôcť slúžiť rovnakému účelu ako vynechanie testovacích prípadov počas vykonávania?
Odpoveď: Otázka je skutočne skutočná a stojí za zodpovedanie.
- Pomocou funkcie filtrovania testu môžete vylúčiť rovnako ako aj zahrnúť testy v závislosti od označenej kategórie. Zatiaľ čo pri deaktivácii sa môžete rozhodnúť iba o vylúčení a nezahrnutí testov na vykonanie.
- Filtrovanie testovacích prípadov je druh podmieneného preskočenia testovacieho prípadu, zatiaľ čo v prípade ignorovaných testov sa tieto testy preskočia bez akýchkoľvek podmienok.
- Ďalším významným rozdielom medzi týmito dvoma je, že keď spustíte testovacie prípady s testami označenými poznámkami @Ignore alebo @Disabled - ignorované testy sa zobrazia vo výsledkoch testu pod PRESKOČENÉ počítať
- Keď spustíte filtrované testy, vôbec sa nezobrazia vo výsledku testu.
Záver
V tomto tutoriáli sme sa naučili, ako filtrovať testy pridaním kategórie / značky do testov.
V JUnit 4 sme sa dozvedeli, že máme @Category, @IncludeCategory a @ExcludeCategory na filtrovanie testovacích prípadov, zatiaľ čo JUnit 5 má @IncludeTags a @ExcludeTags to isté.
Okrem toho má JUnit 5 ďalšie možnosti filtrovania pomocou anotácií @IncludePackages, @ExcludePackages a tiež anotácií na zahrnutie alebo vylúčenie tried pomocou vzorov názvov tried. Čím viac toho skúmame; uvedomujeme si, že je toho ešte veľa, čo treba preskúmať.
=> Dajte si pozor na jednoduchú tréningovú sériu JUnit tu.
Odporúčané čítanie
- Testovací prípad JUnit Ignore: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- Testy JUnit: Ako napísať testovacie prípady JUnit s príkladmi
- Zoznam anotácií JUnit: JUnit 4 Vs JUnit 5
- Výukový program JUnit pre začiatočníkov - Čo je to Testovanie JUnit
- Čo je to testovacie zariadenie JUnit: Výukový program s príkladmi JUnit 4
- Viacero spôsobov vykonávania testov JUnit
- Stiahnite si, nainštalujte a nakonfigurujte JUnit v Eclipse
- Úvod do rámca JUnit a jeho použitie v selénovom skripte - selén výučba # 11