Vytvořit JUnit Testovací sada s příkladem: @RunWith @SuiteClasses
⚡ Chytré shrnutí
JUnit Testovací sady agregují testovací případy z několika tříd, takže běží společně v jednom průchodu, řízené anotacemi @RunWith(Suite.class) a @SuiteClasses a spouštěné prostřednictvím běžné třídy spouštěče testů.

In JUnit, testovací sada nám umožňuje agregovat všechny testovací případy z více kurzů na jednom místě a spouštět je společně.
Chcete-li spustit test sady, musíte anotovat třídu pomocí níže uvedených anotací:
- @RunWith(Suite.class)
- @SuiteClasses(test1.třída, test2.třída…) nebo @Suite.SuiteClasses({test1.třída, test2.třída…})
S výše uvedenými anotacemi se všechny testovací třídy v sadě začnou provádět jedna po druhé. Samotná třída sady zůstane prázdná: slouží pouze jako nosič anotací a běžec si tyto anotace přečte, aby se rozhodl, co spustit.
Kroky k vytvoření testovací sady a testovacího programu
Čtyři níže uvedené kroky vytvoří nejmenší sadu, která skutečně běží: dvě běžné testovací třídy, třída sady, která je pojmenovává, a běžec, který spouští sadu z metody main.
Krok 1) Vytvořte jednoduchou testovací třídu (např. MyFirstClassTest) a přidejte metodu anotovanou pomocí @Test.
První třída obsahuje jednu prázdnou testovací metodu, což stačí k prokázání, že ji sada zvládne:
Krok 2) Vytvořte další testovací třídu, kterou chcete přidat (např. MySecondClassTest), a vytvořte metodu anotovanou pomocí @Test.
Druhá třída má přesně stejný tvar, takže sada má dvě samostatné třídy k agregaci:
Krok 3) Pro vytvoření testSuite je třeba nejprve anotovat třídu pomocí @RunWith(Suite.class) a @SuiteClasses(class1.class, class2.class…).
Všimněte si, že třída sady TestSuiteExample nedeklaruje žádnou vlastní testovací metodu – všechny informace obsahují dvě anotace:
Krok 4) Vytvořte třídu Test Runner pro spuštění naší testovací sady, jak je uvedeno níže:
Běžec je obyčejný Java třída s metodou main, která předává třídu suite do JUnitCore:
Code Vysvětlení:
- Code Řádek 8: Deklarace hlavní metody třídy Test, která spustí náš JUnit test.
- Code Řádek 9: Spuštění testovacích případů pomocí JUnitCore.runClasses, který bere název testovací třídy jako parametr (ve výše uvedeném příkladu používáte TestSuiteExample.class, jak je znázorněno v kroku 3).
- Code Řádek 11: Zpracování výsledku pomocí smyčky for a výpis neúspěšného výsledku.
- Code Řádek 13: Vytiskněte úspěšný výsledek.
Výstup: Zde je výstup, který ukazuje úspěšný test bez selhání trace, jak je uvedeno níže:
Zelený pruh potvrzuje, k čemu sada slouží: jedno spuštění, jedno zobrazení výsledků a obě třídy hlášené pod uzlem sady, nikoli ve dvou samostatných spuštěních.
JUnit Příklad testovací sady
Uvažujme složitější příklad, ve kterém třídy uvnitř sady ve skutečnosti tvrdí něco místo držení prázdné metody.
JunitTest.java
JunitTest.java je jednoduchá třída anotovaná pomocí @RunWith a @Suite anotace. Jako parametry můžete uvést libovolný počet tříd v sadě, jak je uvedeno níže:
package guru99.junit; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ SuiteTest1.class, SuiteTest2.class, }) public class JunitTest { // This class remains empty, it is used only as a holder for the above annotations }
SuiteTest1.java
SuiteTest1.java je testovací třída s testovacími metodami, které vypíší zprávu, jak je uvedeno níže. Tuto třídu budete používat jako člena sady ve výše zmíněné třídě. Spoléhá na pomocnou třídu s názvem JUnitZpráva, která je definována jinde ve stejném balíčku a zde není reprodukována.
package guru99.junit; import static org.junit.Assert.assertEquals; import org.junit.Test; public class SuiteTest1 { public String message = "Saurabh"; JUnitMessage junitMessage = new JUnitMessage(message); @Test(expected = ArithmeticException.class) public void testJUnitMessage() { System.out.println("Junit Message is printing "); junitMessage.printMessage(); } @Test public void testJUnitHiMessage() { message = "Hi!" + message; System.out.println("Junit Hi Message is printing "); assertEquals(message, junitMessage.printHiMessage()); System.out.println("Suite Test 2 is successful " + message); } }
SuiteTest2.java
SuiteTest2.java je další testovací třída, podobná SuiteTest1.java, s testovací metodou pro výpis zprávy, jak je uvedeno níže. Tuto třídu použijete jako člena sady v JunitTest.java.
package guru99.junit; import org.junit.Assert; import org.junit.Test; public class SuiteTest2 { @Test public void createAndSetName() { String expected = "Y"; String actual = "Y"; Assert.assertEquals(expected, actual); System.out.println("Suite Test 1 is successful " + actual); } }
Výstup
Po provedení JunitTest.java, který obsahuje sadu SuiteTest1.java a SuiteTest2.java, dostanete níže uvedený výstup. Konzole vypíše zprávy vygenerované oběma třídami:
Jedno JUnit zobrazení zaznamenává stejný běh jako tři úspěšně procházející testovací metody seskupené pod třídou suite:
Poznámka: Popisky konzole v tomto příkladu jsou přeškrtnuté – řetězec vytištěný SuiteTest1 zní „Suite Test 2“ a řetězec vytištěný SuiteTest2 zní „Suite Test 1“. Původní výpisy jsou reprodukovány beze změny, takže popisky zůstávají tak, jak je autor napsal; přečtěte si název třídy v JUnit zobrazení, nikoli vytištěného popisku, když porovnáváte výstup se zdrojem.
Jak vytvořit testovací sadu v JUnit 5
JUnit Verze 5 zcela odstraňuje běžce, takže @RunWith(Suite.class) neexistuje v balíčcích org.junit.jupiter. Sady byly přesunuty do JUnit Platforma, která je dodává v samostatném artefaktu s názvem engine-platform-suite-junitPřidejte tuto závislost a poté anotujte třídu pomocí @Suite a jedné z anotací selektoru.
import org.junit.platform.suite.api.SelectClasses; import org.junit.platform.suite.api.Suite; import org.junit.platform.suite.api.SuiteDisplayName; @Suite @SuiteDisplayName("Guru99 suite") @SelectClasses({ SuiteTest1.class, SuiteTest2.class }) public class JunitTest { // Empty holder, exactly as in JUnit 4 }
Anotace selektorů nahrazují jediný seznam @SuiteClasses malou skupinou možností:
| Anotace | Co vybírá |
| @SelectClasses | Jednotlivé testovací třídy pojmenované jednu po druhé, přímá náhrada za @SuiteClasses. |
| @SelectPackages | Každá testovací třída v pojmenovaném balíčku a ve všech jeho podbalíčcích. |
| @IncludeClassNamePatterns | Filtr regulárních výrazů aplikovaný na výběr. |
| @SuiteDisplayName | Čitelný název zobrazený v sestavě místo názvu třídy. |
V praxi jsou důležité další dva rozdíly. A JUnit Třída sady 5 může deklarovat metody @BeforeSuite a @AfterSuite, které se spustí jednou pro celou sadu, a JUnit 4 výše uvedený příklad se stále spouští na JUnit Platforma přes vintage engine, takže původní kód na této stránce nemusí být přepisován, aby nadále fungoval.
Výhody a omezení JUnit Testovací sady
Apartmá je skupinaping mechanismus, nikoli testovací rámec vlastní, a to formuje jak to, v čem dělá dobře, tak i to, kde přestává být užitečné.
Výhody
- Jeden start spustí související třídy společně, takže kouřová sada nebo regrese set se spouští jediným příkazem.
- Výsledné zobrazení seskupuje každou třídu pod jeden uzel sady, což usnadňuje odhalení sdílené chyby.
- Seznam členů je uložen v kódu, takže je kontrolován a verzován stejně jako jakýkoli jiný zdrojový soubor.
- Stejnou třídu suite lze spustit z IDE, z běžce, jako je například JUnitJádro nebo z nástroje pro sestavení.
Omezení
- @SuiteClasses je pevně zakódovaný seznam, takže nová testovací třída je tiše vynechána, dokud někdo sadu neupraví.
- Sada neposkytuje žádnou záruku objednání nad rámec pořadí, ve kterém jsou třídy uvedeny.
- Mezi členskými třídami není nic sdíleno, takže sada nenahrazuje příslušenství ani základní třídu.
- Nástroje pro sestavování již vyhledávají testovací třídy pomocí konvence pojmenování, což v mnoha projektech činí sadu nadbytečnou.
Časté chyby při vytváření JUnit Testovací sada
Většina problémů se sadou zobrazuje jako krátká a neužitečná zpráva. Tabulka mapuje zprávy, se kterými se pravděpodobně setkáte, s jejich příčinou a řešením.
| Zpráva nebo příznak | Způsobit | Opravit |
| inicializationError: Žádné spustitelné metody | Třída se spouští jako běžná testovací třída, ale obsahuje pouze anotace. | Přidejte @RunWith(Suite.class), aby běžec sady převzal kontrolu místo výchozího běžce. |
| Nelze najít symbol: třída Suite | Chybí import ze Suite. | Importujte org.junit.runners.Suite společně s org.junit.runner.RunWith. |
| Suita běží, ale jedna hodina je vynechána | Kurz nebyl nikdy přidán do seznamu @SuiteClasses. | Explicitně přidejte třídu nebo ji přesuňte do @SelectPackages v JUnit 5. |
| Název třídy není kompilátorem akceptován. | @Runwith nebo @suiteClasses bylo napsáno s nesprávnými velkými a malými písmeny. | Java V anotacích se rozlišují velká a malá písmena: pište přesně @RunWith a @SuiteClasses. |
| Testy v samotné třídě suite se nikdy neběží. | Do držitele sady byla přidána metoda @Test. | Ponechte držitele prázdné a přesuňte testovací metodu do členské třídy. |
Napsat suitu jednou a pakping Skutečná práce spočívá v přesnosti. Pokud se seznam odchyluje od tříd na disku, sada hlásí zelenou barvu, zatímco část jednotkový test set se vůbec neprovede, jeden z nejtišších režimů selhání v testování softwaru.







