Co jsou anotace JUnit?
JUNIT ANNOTATIONS je speciální forma syntaktických metadat, která lze přidat do zdrojového kódu Java pro lepší čitelnost a strukturu kódu. Proměnné, parametry, balíčky, metody a třídy mohou být anotovány. V Junit4 byly zavedeny anotace, díky nimž je kód Java čitelnější a jednodušší. To je velký rozdíl mezi Junit3 a Junit4, že Junit4 je založen na anotacích.
Díky znalostem anotací v Junit5 se lze snadno naučit a implementovat test JUnit. Níže je uveden seznam důležitých a často používaných anotací:
Č. | Anotace | Popis |
---|---|---|
1. | @Test | Tato anotace je náhradou org.junit.TestCase, která označuje, že metodu public void, ke které je připojena, lze provést jako testovací případ. |
2. | @Před | Tato anotace se používá, pokud chcete před každým testovacím případem provést nějaký příkaz, například předběžné podmínky. |
3. | @Před hodinou | Tato anotace se používá, pokud chcete provést některé příkazy před všemi testovacími případy, např. Testovací připojení musí být provedeno před všemi testovacími případy. |
4. | @Po | Tuto anotaci lze použít, pokud chcete po každém testovacím případu provést některé příkazy, např. Resetování proměnných, mazání dočasných souborů, proměnných atd. |
5. | @Po hodině | Tuto anotaci lze použít, pokud chcete provést všechny příkazy po všech testovacích případech, např. Uvolnění prostředků po provedení všech testovacích případů. |
6. | @Ignoruje | Tuto anotaci lze použít, pokud chcete ignorovat některé příkazy během provádění testu, např. Deaktivovat některé testovací případy během provádění testu. |
7. | @Test (časový limit = 500) | Tuto anotaci lze použít, pokud chcete nastavit nějaký časový limit během provádění testu, např. Pokud pracujete na základě nějaké SLA (Service level agreement), a testy je třeba dokončit v určitém stanoveném čase. |
8. | @Test (očekává se = IllegalArgumentException.class) | Tuto anotaci lze použít, pokud chcete během provádění testu zpracovat nějakou výjimku. Například, pokud chcete zkontrolovat, zda konkrétní metoda vyvolává specifikovanou výjimku nebo ne. |
V tomto výukovém programu se naučíte
- Příklad anotací JUnit
- JUnit Assert Class
- Třída testovacích případů JUnit
- Třída JUnit TestResult
- Třída JUnit Test Suite
Příklad anotací JUnit
Vytvořme třídu pokrývající důležité anotace JUnit pomocí jednoduchých tiskových příkazů a spusťme ji třídou testovacího běžce:
Krok 1) Zvažte níže třídu java, která má různé metody, které jsou připojeny k výše uvedeným anotacím:
JunitAnnotationsExample.java
balíček guru99.junit;importovat statický org.junit.Assert.assertEquals;importovat statický org.junit.Assert.assertFalse;import java.util.ArrayList;importovat org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Ignore;import org.junit.Test;veřejná třída JunitAnnotationsExample {soukromý seznam ArrayList <řetězec>;@Před hodinoupublic static void m1 () {System.out.println ("Použití @BeforeClass, provedeno před všemi testovacími případy");}@Předpublic void m2 () {list = new ArrayList();System.out.println ("Použití anotací @Before, provedených před každým testovacím případem");}@Po hodiněpublic static void m3 () {System.out.println ("Použití @AfterClass, provedeno po všech testovacích případech");}@Popublic void m4 () {list.clear ();System.out.println ("Použití @After, provedeno po každém testovacím případě");}@Testpublic void m5 () {list.add ("test");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}@Ignorovatpublic void m6 () {System.out.println ("Při použití @Ignore je toto spuštění ignorováno");}@Test (časový limit = 10)public void m7 () {System.out.println ("Pomocí @Test (timeout) jej lze použít k vynucení timeoutu v testovacím případě JUnit4");}@Test (očekává se = NoSuchMethodException.class)public void m8 () {System.out.println ("Pomocí @Test (očekáváno) zkontroluje během svého provádění specifikovanou výjimku");}}
Krok 2) Pojďme vytvořit třídu testovacího běžce k provedení výše uvedeného testu:
TestRunner.java
balíček guru99.junit;import org.junit.runner.JUnitCore;import org.junit.runner.Result;import org.junit.runner.notification.Failure;veřejná třída TestRunner {public static void main (String [] args) {Výsledek = JUnitCore.runClasses (JunitAnnotationsExample.class);pro (Selhání selhání: result.getFailures ()) {System.out.println (failure.toString ());}System.out.println ("Result ==" + result.wasSuccessful ());}}
Očekávaný výsledek
- Všechny testovací případy budou provedeny jeden po druhém a všechny tiskové příkazy lze zobrazit na konzole.
- Jak je uvedeno výše v tabulce @Before, @BeforeClass [metoda m1 () a m2 ()] budou provedeny před každým a před všemi testovacími případy.
- Stejným způsobem @ after, @ afterClass (metoda m3 () a m4 ()) budou provedeny po každém a po všech testovacích případech. @ignore (metoda m6 ()) bude považováno za ignorování testu.
Pojďme podrobně analyzovat testovací případy použité ve výše uvedené třídě Java:
- Zvažte metodu m5 (), jak je uvedeno níže:
@Testpublic void m5 () {list.add ("test");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}
Ve výše uvedené metodě, když přidáváte řetězec do proměnné "list", tak
- list.isEmpty () vrátí hodnotu false.
- assertFalse (list.isEmpty ()) musí vrátit true.
- V důsledku toho bude modelový případ projít .
Protože jste do seznamu přidali pouze jeden řetězec, velikost je jedna.
- list.size () musí vrátit hodnotu int jako „1“.
- Takže assertEquals (1, list.size ()) musí vrátit true.
- V důsledku toho bude modelový případ projít .
- Zvažte metodu m7 (), jak je uvedeno níže:
@Test (časový limit = 10)public void m7 () {System.out.println ("Pomocí @Test (timeout) jej lze použít k vynucení timeoutu v testovacím případě JUnit4");}
Jak je uvedeno výše, @Test (timeout = 10) se anotace používá k vynucení časového limitu v testovacím případě.
- Zvažte metodu m8 (), jak je uvedeno níže:
@Test (očekává se = NoSuchMethodException.class)public void m8 () {System.out.println ("Pomocí @Test (očekáváno) zkontroluje během svého provádění specifikovanou výjimku");}
Jak je uvedeno výše, @Test (očekává se) zkontroluje zadanou výjimku během provádění, takže metoda m8 () vyvolá „Žádná taková výjimka metody“. Ve výsledku bude test proveden s výjimkou.
Po předání všech testovacích případů to povede k úspěšnému provedení testu.
Skutečný výsledek
Protože ve výše uvedeném příkladu existují tři testovací případy, všechny testovací případy budou provedeny jeden po druhém. Viz výstup níže :
Níže naleznete prohlášení o tisku, která lze zobrazit na konzole:
Pomocí @BeforeClass, provedeno před všemi testovacími případy
Pomocí anotací @Before, provedených před každým testovacím případem
Použití @After, provedeno po každém testovacím případě
Pomocí anotací @Before, provedených před každým testovacím případem
Pomocí @Test (časový limit) lze použít k vynucení časového limitu v testovacím případě JUnit4
Použití @After, provedeno po každém testovacím případě
Pomocí anotací @Before, provedených před každým testovacím případem
Pomocí @Test (očekává se) zkontroluje zadanou výjimku během jeho provádění
Použití @After, provedeno po každém testovacím případě
Pomocí @AfterClass, provedeno po všech testovacích případech
JUnit Assert Class
Tato třída poskytuje spoustu metod tvrzení užitečných při psaní testovacího případu. Pokud jsou předány všechny příkazy assert, výsledky testu jsou úspěšné. Pokud některý z tvrzení selže, selžou výsledky testu.
Jak jste viděli dříve, níže uvedená tabulka popisuje důležité metody a popis Assert:
Č. | Metoda | Popis |
---|---|---|
1. | void assertEquals (boolean očekávaný, boolean skutečný) | Zkontroluje, zda jsou dvě hodnoty stejné jako metoda equals třídy Object |
2. | void assertFalse (logická podmínka) | funkcí je zkontrolovat, zda je podmínka nepravdivá. |
3. | void assertNotNull (objekt objektu) | Funkce „assertNotNull“ slouží ke kontrole, zda objekt nemá hodnotu null. |
4. | void assertNull (objekt objektu) | Funkce „assertNull“ slouží ke kontrole, zda je objekt nulový. |
5. | void assertTrue (logická podmínka) | Funkce „assertTrue“ slouží ke kontrole, zda je podmínka splněna. |
6. | void fail () | Pokud chcete hodit jakoukoli chybu tvrzení, máte fail (), jehož výsledkem je vždy verdikt selhání. |
7. | void assertSame ([Řetězcová zpráva] | Funkcí „assertSame“ je zkontrolovat, zda tyto dva objekty odkazují na stejný objekt. |
8. | void assertNotSame ([Řetězcová zpráva] | Funkcí „assertNotSame“ je zkontrolovat, zda tyto dva objekty neodkazují na stejný objekt. |
Třída testovacích případů JUnit
Chcete-li spustit více testů, je v balíčcích org.junit.TestCase k dispozici třída TestCase . Annotation @Test says JUnit that this public void method (Test Case here) to which it is attached can be run as a test case.
Níže uvedená tabulka ukazuje některé důležité metody dostupné ve třídě org.junit.TestCase :
Č. | Metoda | Popis |
---|---|---|
1. | int countTestCases () | Tato metoda se používá k výpočtu počtu testovacích případů provedených metodou run (TestResult tr) . |
2. | TestResult createResult () | Tato metoda se používá k vytvoření objektu TestResult . |
3. | Řetězec getName () | Tato metoda vrací řetězec, který není nic jiného než TestCase . |
4. | TestResult run () | Tato metoda se používá k provedení testu, který vrací objekt TestResult |
5. | neplatný běh (výsledek TestResult) | Tato metoda se používá k provedení testu, který má TestResult objekt, který nic nevrací. |
6. | void setName (název řetězce) | Tato metoda se používá k nastavení názvu TestCase. |
7. | void setUp () | Tato metoda se používá k zápisu kódu přidružení prostředků. např. vytvořit připojení k databázi. |
8. | void tearDown () | Tato metoda se používá k zápisu kódu uvolnění prostředku. např. po provedení transakce uvolněte připojení k databázi. |
Třída JUnit TestResult
Když provedete test, vrátí výsledek (ve formě objektu TestResult ). Tento objekt TestResult lze použít k analýze výsledného objektu. Výsledkem testu může být neúspěch nebo úspěch. V následující tabulce najdete důležité metody používané ve třídě org.junit.TestResult:Č. | Metoda | Popis |
---|---|---|
1. | void addError (Testovací test, Throwable t) | Tato metoda se používá, pokud požadujete přidat do testu chybu. |
2. | void addFailure (Testovací test, AssertionFailedError t) | Tato metoda se používá, pokud požadujete přidání selhání do seznamu selhání. |
3. | void endTest (testovací test) | Tato metoda se používá k upozornění, že je proveden test (dokončen) |
4. | int errorCount () | Tato metoda se používá k získání chyby zjištěné během provádění testu. |
5. | Výčet | Tato metoda jednoduše vrátí kolekci (výčet zde) chyb. |
6. | int failureCount () | Tato metoda se používá k získání počtu chyb zjištěných během provádění testu. |
7. | void run (TestCase test) | Tato metoda se používá k provedení testovacího případu. |
8. | int runCount () | Tato metoda jednoduše spočítá provedený test. |
9. | void startTest (testovací test) | Tato metoda se používá k upozornění, že je spuštěn test. |
10. | neplatná zastávka () | Tato metoda se používá k testování běhu, který má být zastaven. |
Třída JUnit Test Suite
Pokud chcete provést více testů v určitém pořadí, lze to provést kombinací všech testů na jednom místě. Toto místo se nazývá testovací sady.
V následující tabulce najdete důležité metody používané ve třídě org.junit.TestSuite :
Č. | Metoda | Popis |
---|---|---|
1. | void addTest (testovací test) | Tato metoda se používá, pokud chcete do sady přidat test. |
2. | void addTestSuite (Class extends TestCase> testClass) | Tato metoda se používá, pokud chcete určit třídu při přidávání testu do sady. |
3. | int countTestCases () | Tato metoda se používá, pokud chcete spočítat počet testovacích případů. |
4. | Řetězec getName () | Tato metoda se používá k získání názvu testovací sady. |
5. | neplatný běh (výsledek TestResult) | Tato metoda se používá k provedení testu a shromáždění výsledku testu v objektu TestResult . |
6. | void setName (název řetězce) | Tato metoda se používá k nastavení názvu TestSuite . |
7. | Test testAt (int index) | Tato metoda se používá, pokud chcete vrátit test s daným indexem. |
8. | int testCount () | Tato metoda se používá, pokud chcete v sadě vrátit několik testů. |
9. | varování před statickým testem (řetězcová zpráva) | Tato metoda vrací test, který selže, a zaznamená varovnou zprávu. |
Souhrn:
- JUnit poskytuje přenosné API, které poskytuje všechny důležité třídy a poznámky užitečné při psaní testu jednotky.
- Třídy, které jsou velmi užitečné při psaní testovacího případu
- org.junit.Assert
- org.junit.TestCase
- org.junit.TestResult
- org.junit.TestSuite
- seznam důležitých a často používaných anotací
@Před
@Před hodinou
@Po
@Po hodině
@Test
@Ignorovat