junit test suite filtering test cases
Tento výukový program pojednává o tom, co je testovací sada JUnit, jak vytvořit testovací sadu a jak filtrovat testovací případy v JUnit 4 vs JUnit 5:
O tom, jak přeskočit určité testovací případy během provádění, jsme se dozvěděli v našem předchozím kurzu. Dozvěděli jsme se také o různých anotacích použitých v JUnit 4 a JUnit 5.
V tomto tutoriálu se naučíme:
- Co je to testovací sada?
- Jak vytvoříme testovací sadu zapouzdřením více testovacích případů do skupiny a provedením sady pomocí třídy JUnitCore?
=> Navštivte zde exkluzivní výukové série školení JUnit.
Co se naučíte:
JUnit Test Suite
JUnit 4: @RunWith, @SuiteClasses Annotations
Výukový program Několik způsobů provádění testů JUnit ilustruje, jak vytvořit testovací sadu ve Windows JUnit 4.
Anotace @RunWith a @SuiteClasses nám pomohlo vytvořit testovací sadu seskupením několika testovacích tříd JUnit. Následně spuštěný soubor s třídou JUnitCore.runclasses () vyvolal provedení vytvořené testovací sady.
V této části najdete všechny podrobnosti o pracovním postupu spolu se skutečným kódem pro JUnit 4.
JUnit 5: @RunWith, @SelectClasses, @SelectPackages Annotations
Vytvoření testovací sady v JUnit 5 je docela podobné tomu, co máme v JUnit 4. Takže v čem je tedy rozdíl?
# 1) v JUnit 4 , máme Suite.class, který je předán jako parametr do poznámky @RunWith k podpoře vytvoření testovací sady, zatímco JUnit 5 používá stejnou anotaci @RunWith, ale se vstupním parametrem jako JUnitPlatform.class namísto Suite.class .
Řádek kódu v JUnit 5 tedy vypadá @RunWith (JUnitPlatform.class). Toto je anotace, která je součástí vaší podprojektové platformy JUnit.
#dva) v JUnit 4 , používáme @SuiteClasses seskupit více tříd JUnit oddělených čárkou, když jste v JUnit 5 my máme:
- Anotace @SelectClasses to je ekvivalent k @SuiteClasses v JUnit 4 pro seskupení více tříd JUnit.
- @SelectPackages anotace se používá ke seskupení více testů z balíčku (balíků). Musíte zadat hodnotu pole řetězce, která představuje balíček, který chcete zahrnout.
Jinými slovy tedy
- Pokud v případě, že chcete seskupit testovací případy z jednoho balíčku, JUnit 5 vám to umožní.
- Nebo v případě, že chcete seskupit testovací případy z více balíčků, JUnit 5 to podporuje. Zde je třeba pamatovat na to, že testy ve všech dílčích balíčcích zmíněného balíčku jsou ve výchozím nastavení zahrnuty také do testovací sady.
JUnit 5: Různé scénáře / příklady
Vytváření testovací sady seskupující více testovacích tříd
Fragment kódu je uveden níže:
@RunWith(JUnitPlatform.class) @SelectClasses({JUnit5TestCase1.class, JUnit5TestCase2.class }) public class JUnitTestSuite { }
Vytvoření testovací sady pro jeden balíček
Fragment kódu je uveden níže:
@RunWith(JUnitPlatform.class) @SelectPackages({“ demo.tests “}) public class JUnit5TestSuite { }
Poznámka :
- Říci demo testy balíček má dílčí balíček demo.testy.subtesty.
- Kód @SelectPackages ({„demo.tests“}) zahrne všechny testy v rámci dílčího balíčku také do testovací sady; ve výchozím stavu.
- Pokud jste uvedli @SelectPackages ({„demo.tests.subtests“}) , testovací případy v dílčím balení demo.testy.subtesty bude zahrnuto pouze v testovací sadě, zatímco testy z jeho nadřazeného balíčku, tj. demo testy nebudou zahrnuty.
Vytvoření testovací sady pro více balíčků
Fragment kódu pro vytvoření testovací sady pro více balíčků oddělené čárkou v JUnit 5 - bude vypadat takto:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests”, “demo1.tests”, “demo2.tests”}) public class JUnit5TestSuite { }
Filtrační testovací sada - JUnit 4 vs JUnit 5
Někdy musíme filtrovat testovací případy a provést konkrétní sadu testů podle našich potřeb. Mohla by například existovat sada testů určených pro regresní testování, samostatná sada pro testování jednotek a samostatná sada testovacích případů pro testování kouře.
Musíme vyloučit nebo zahrnout testovací případy z určitých balíčků nebo tříd nebo kategorií. Filtrování nebo označování testů z jednoho balíčku je jedinou možností v JUnit4.
Ve srovnání s JUnit 4 přichází JUnit 5 s dobrou sadou funkcí na podporu této potřeby filtrování testovacích případů z jednoho balíčku nebo více balíčků a dílčích balíčků podle vašich měnících se požadavků.
JUnit 4 - @Category, @IncludeCategory, @ExcludeCategory
Testovací případy v JUnit 4 lze rozdělit do různých kategorií. Tyto kategorie lze při spuštění testovací sady vyloučit nebo zahrnout. Anotace @Category, @IncludeCategory a @ExcludeCategory jsou podporovány od JUnit 4.12 a novějších.
Kroky na vysoké úrovni k vytvoření filtrů založených na kategorii nebo kategoriích jsou následující:
# 1) Vytvořte rozhraní značek, které hraje roli v kategorii.
#dva) Anotujte testovací metody tříd, které mají být zahrnuty do SuiteClasses s @Kategorie a název kategorie.
# 3) V souboru testovací sady použijte anotaci @IncludeCategory s názvem kategorie, aby zahrnoval testy patřící do konkrétní kategorie.
# 4) V souboru testovací sady použijte anotaci @ VyloučitKategorii s názvem kategorie pro jejich vyloučení.
# 5) Anotaci @Category lze použít také na úrovni testu nebo na úrovni třídy. Pokud se anotace použije na úrovni testu, pak se daný test označí danou kategorií, zatímco pokud je anotace na úrovni třídy, všechny testy ve třídě se označí danou kategorií.
Podívejme se na několik dalších podrobností, abychom pochopili praktickou implementaci kategorizace testů a jejich filtrování pro provedení:
Krok 1:
Začneme vytvořením a značkovací rozhraní který bude hrát roli a kategorie pro zkušební metody. Zde vytvoříme kategorii s názvem UnitTest . Kód je velmi jednoduchý. Přečtěte si prosím níže uvedený kód.
Kód pro UnitTest.java
package demo.tests; public interface UnitTest {}
Krok 2:
Tuto kategorii označíme na úroveň zkušební metody ve třídě JUnitTestCase1.java . Chcete-li přidat testovací případ junitMethod1 () do kategorie UnitTest, musíme anotovat testovací metodu pomocí @Category (UnitTest.class) .
Tím se přidá testovací metoda do kategorie UnitTest. Ostatní testovací metody (pokud existují) nejsou označeny v kategorii, pokud metody nejsou anotovány kategorií.
Aby v našem kódu fungovala anotace @Category, musíme balíček importovat org.junit.experimentální.kategorie. Kategorie
Fragment kódu z JUnitTestCase1.java:
@Category(UnitTest.class) @Test public void junitMethod1(){ int Value2=9000; Assert. assertEquals (Value1, Value2); }
Alternativně může testovací metoda patřit také do více kategorií Např. : @Category (UnitTest.class, SmokeTest.class)
Krok 3:
Nyní bych označil kategorii na úrovni třídy ve třídě JUnitTestCase2.java . Stejný příkaz, který byl přidán na úrovni testovací metody v předchozím kroku, bude přidán také do aktuálního souboru třídy.
Všimněte si, že zde přidáme prohlášení na úrovni třídy. Tímto způsobem budou všechny testovací metody v souboru patřit k UnitTest Kategorie.
Fragment kódu z JUnitTestCase2.java:
@Category(UnitTest.class) @Test public class JUnitTestCase2 { public String stringValue='JUnit';
Krok 4:
otázky a odpovědi technického analytika obchodního analytika
Nyní, když byly naše požadované testovací případy kategorizovány do kategorie UnitTest, nyní uvidíme, jak je přidat do testovací sady jejich filtrováním na základě kategorie. V kódu provedeme určité změny kódu JUnitTestSuite.class prokázat to.
- Kategorie. Třída bude předán jako parametr do poznámky @RunWith.
- @ Suite.SuiteClasses převezme pole řetězců testovacích tříd.
- Anotace @ Kategorie. Zahrnout kategorii bude jako parametr potřebovat UnitTest.class.
- Toto prohlášení nám pomůže vyfiltrovat celou sadu a spustit pouze ty testovací případy ze sady, která patří do dané kategorie.
- Kategorie.třída potřebuje balíček org.junit.experimental.categories.Categories k importu.
Fragment kódu pro JunitTestSuite.java
@RunWith(Categories.class) @Categories.IncludeCategory(UnitTest.class) @Suite.SuiteClasses({JUnitTestCase1.class, JUnitTestCase2.class}) public class JUnitTestSuite {
Anotace @ Kategorie. Zahrnout kategorii lze také zapsat jako @IncludeCategory. Můžete také vytvořit více rozhraní (kategorií) a anotovat metody třídy / testu několika kategoriemi oddělenými čárkou. Níže uvedený příklad odfiltruje testy patřící do kategorie - Kategorie1 a Kategorie2.
Příklad: @IncludeCategory ({Category1.class, Category2.class})
Podobná pravidla platí @ Kategorie. VyloučitKategorie / @ VyloučitKategorii vyloučit zkušební metody z kategorie nebo kategorií během zkušebního provozu.
JUnit 5 - @IncludeTags, @ExcludeTags, @IncludePackages, @ExcludePackages, @IncludeClassNamePatterns, @ExcludeClassNamePatterns
JUnit 5 je dodáván s několika přístupy k organizaci a filtrování testovacích případů.
JUnit 5 - @IncludeTags, @ExcludeTags
# 1) Stejně jako JUnit 4 má @IncludeCategory a @ExcludeCategory anotace pro podporu filtrování testovacích případů pro provedení.
#dva) JUnit 5 má @IncludeTags a @ExcludeTags poznámky k dosažení stejného účelu.
# 3) JUnit 4 odkazuje na testovací případy, které mají být organizovány do konkrétní kategorie, zatímco JUnit 5 odkazuje na označení testovacích případů konkrétní značkou, aby bylo možné filtrovat testovací případy pro provedení.
Kroky na vysoké úrovni k vytvoření filtrů založených na značkách jsou následující:
- Anotujte testovací metody balíčků, které mají být zahrnuty do @SelectPackages s @Štítek a uživatelem definovaný název značky. Jedna třída může mít různé značky pro různé testovací metody.
- Můžete také anotovat @Tag na úrovni třídy, aby byly označeny všechny testy ve třídě.
- V souboru testovací sady použijte anotaci @IncludeTags s názvem tagu, aby zahrnoval testy patřící ke konkrétnímu tagu.
- V souboru testovací sady použijte anotaci @ Vyloučit značky s názvem značky pro jejich vyloučení z testovací sady.
Pojďme si nyní podrobně představit, jak prakticky implementovat filtrování v JUnit 5.
Krok 1 : Označujeme testovací metodu v JUnit5TestCase1.java na název značky „Regrese“
Fragment kódu z JUnit5TestCase1.java:
@Tag(“Regression”) @Test public void junitMethod1(){
Krok 2 : Označujeme testovací metodu v JUnit5TestCase2.java na název značky „SmokeTest“.
Fragment kódu z JUnit5TestCase2.java:
@Tag(“SmokeTest”) @Test public void junitMethod2(){
Krok 3: Nyní, když byly testovací metody označeny, nyní aktualizujeme soubor JUnit5TestSuite.java a přidáme příslušné filtry podle značek pro testy. Níže uvedený kód zahrnuje všechny testy označené jako „Regrese“ a vylučuje všechny testy označené jako „SmokeTest“.
Fragment kódu z JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeTags(“Regression”) @ExcludeTags(“SmokeTest”) public class JUnit5TestSuite { }
JUnit 5 - @IncludePackages, @ExcludePackages
Už víme, že když předáme název balíčku v @SelectPackages anotace, testy v dílčích balíčcích balíčku se také přidají do testovací sady.
Mohly by existovat určité dílčí balíčky, které chceme zahrnout do naší testovací sady, zatímco několik dalších dílčích balíčků, které nechceme nebo nemusí být relevantní, aby byly zahrnuty do naší sady.
To je usnadněno anotacemi @IncludePackages a @ExcludePackages v JUnit 5.
Předpokládejme, že máme balíček ‚demo.tests ', který má tři dílčí balíčky, tj. Subpackage1, subpackage2 a subpackage 3 se svými testovacími třídami v každém z níže uvedených balíčků.
Podívejme se na fragment kódu JUnit5TestSuite.java, který nám představí, jak zahrnout a vyloučit balíček.
Scénář č. 1: Pomocí filtru zahrňte pouze testovací případy z dílčího balíčku1.
Níže uvedený kód obsahuje všechny testy ze všech tříd JUnit v balíčku demo.tests.subpackage1, avšak vylučuje všechny testy přímo pod demo.test balíčku a ty, které jsou 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 { }
Scénář č. 2: Použít filtr k vyloučení testovacích případů pouze z dílčího balíčku balíčku3.
Níže uvedený kód vylučuje všechny testy z tříd JUnit v balíčku - demo.tests.subpackage3, nicméně sada obsahuje všechny testy přímo pod demo.test balíčku a ty pod balíkem 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
Pokud chcete z balíčku zahrnout nebo vyloučit určité třídy odpovídající konkrétnímu regulárnímu výrazu, anotace @ IncludeClassNamePatterns a @ ExcludeClassnameVzorky lze použít v souboru třídy testovací sady.
Podívejme se nyní na ilustraci prostřednictvím aktualizace kódu v JUnit5TestSuite.java
Scénář č. 1:
Níže uvedený kód obsahuje třídy, které končí „Ctests“ z balíčku demo.tests
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeClassNamePatterns({'^.*CTests?$'})
Scénář č. 2:
Nyní vyloučíme ty třídy, které zahájit s „STest“ z demo.testů balíčku
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludeClassNamePatterns({'^STest.*$'})
Scénář č. 3:
Jako kritéria filtru lze také předat více regulárních výrazů. Níže uvedený kód uvádí dva různé regulární výrazy oddělené znakem „ NEBO Operátor. Štěrbinová tyč | je zde operátor OR.
jaký je nejlepší software pro převod textu na řeč
Kód filtruje třídy zasvěcování s Test ( Test.*) nebo konec s Testy (*. Testy?) a zahrnuje tyto třídy v testovací sadě, protože se používá anotace @IncludeClassNamePatterns.
Poznámka: Pokud se plně kvalifikovaný název třídy shoduje s alespoň jedním vzorem, bude třída načtena podle anotace @IncludeClassNamePatterns nebo @ExcludeClassNamePatterns.
@RunWith (JUnitPlatform.class)
@SelectPackages ({„demo.tests“})
@IncludeClassNamePatterns (. * Testy?) $ “)
Časté dotazy O testovacích případech filtrování JUnit
Tady je otázka, která vám možná už nějakou dobu přetrvává ve vaší mysli.
Otázka 1) Jaký je rozdíl mezi deaktivací / ignorováním testu a odfiltrováním testu? Nemůže některá z funkcí pomoci sloužit stejnému účelu přeskočení testovacích případů během provádění?
Odpověď: Otázka je skutečně skutečná a stojí za odpověď.
- Pomocí funkce odfiltrování testu můžete vyloučit stejně jako zahrnout testy v závislosti na označené kategorii. Zatímco s deaktivací se můžete rozhodnout pouze o vyloučení a nezahrnutí testů pro provedení.
- Filtrování testovacích případů je druh podmíněného přeskočení testovacího případu, zatímco v případě ignorovaných testů jsou tyto testy přeskočeny bez podmínek.
- Dalším významným rozdílem mezi těmito dvěma je to, že když spustíte testovací případy s testy anotovanými pomocí @Ignore nebo @Disabled - ignorované testy se zobrazí ve výsledcích testu pod PŘESKOČENO počet
- Když spustíte odfiltrované testy, vůbec se nezobrazí ve výsledku testu.
Závěr
V tomto kurzu jsme se naučili, jak filtrovat testy přidáním kategorie / značky k testům.
V JUnit 4 jsme se dozvěděli, že máme @Category, @IncludeCategory a @ExcludeCategory pro filtrování testovacích případů, zatímco JUnit 5 má @IncludeTags a @ExcludeTags, aby učinily totéž.
Kromě toho má JUnit 5 další možnosti filtrování pomocí anotací @IncludePackages, @ExcludePackages a také anotací k zahrnutí nebo vyloučení tříd pomocí vzorů názvů tříd. Čím více zkoumáme; uvědomujeme si, že je toho ještě hodně k prozkoumání.
=> Dávejte pozor na jednoduchou tréninkovou sérii JUnit zde.
Doporučené čtení
- Testovací případ JUnit Ignore: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- Testy JUnit: Jak psát testovací případy JUnit s příklady
- Seznam anotací JUnit: JUnit 4 Vs JUnit 5
- Výukový program JUnit pro začátečníky - Co je to testování JUnit
- Co je testovací přípravek JUnit: Výukový program s příklady JUnit 4
- Několik způsobů provádění testů JUnit
- Stahujte, instalujte a konfigurujte JUnit v Eclipse
- Úvod do rámce JUnit a jeho použití v Selenium Script - Selenium Tutorial # 11