JUnit Annotációk bemutatója példával: Mi a @Test és a @After
Mi a JUnit Annotációk?
JUnit Magyarázatok a szintaktikai metaadatok egy speciális formája, amelyhez hozzáadható Java forráskód a jobb kód olvashatóság és szerkezet érdekében. Változók, paraméterek, csomagok, metódusok és osztályok annotálhatók. A jegyzeteket a Junit4-ben vezették be, ami Java a kód olvashatóbb és egyszerűbb. Ez a nagy különbség a Junit3 és a Junit4 között, hogy a Junit4 annotáció alapú.
A Junit5 annotációk ismeretében könnyen megtanulható és megvalósítható a JUnit teszt. Az alábbiakban a fontos és gyakran használt JUnit megjegyzések listája:
S.No. | Magyarázatok | Leírás |
---|---|---|
1. | @Teszt | Ez az annotáció az org.junit.TestCase helyettesítője, amely azt jelzi, hogy a nyilvános érvénytelen metódus, amelyhez csatolva van, tesztesetként is végrehajtható. |
2. | @Előtt | Ezt a megjegyzést akkor használjuk, ha valamilyen utasítást, például előfeltételeket szeretne végrehajtani minden teszteset előtt. |
3. | @Óra előtt | Ezt az annotációt akkor használjuk, ha néhány utasítást szeretne végrehajtani, mielőtt az összes tesztesetet végrehajtaná, pl. a tesztkapcsolathoz az összes teszteset előtt. |
4. | @Után | Ez az annotáció akkor használható, ha mindegyik utasítás után végre akar hajtani néhány utasítást Teszt eset pl. változók visszaállításához, ideiglenes fájlok törléséhez, változók stb. |
5. | @Óra után | Ez az annotáció akkor használható, ha az összes teszteset után szeretne néhány utasítást végrehajtani pl. Erőforrások felszabadítása az összes teszteset végrehajtása után. |
6. | @Ignores | Ez az annotáció akkor használható, ha figyelmen kívül szeretne hagyni néhány utasítást a teszt végrehajtása során, például letilt néhány tesztesetet a teszt végrehajtása során. |
7. | @Teszt(időtúllépés=500) | Ez a megjegyzés akkor használható, ha időtúllépést szeretne beállítani a tesztvégrehajtás során, például ha valamilyen SLA (Service level Agreement) alatt dolgozik, és a teszteket meghatározott időn belül be kell fejezni. |
8. | @Test(expected=IllegalArgumentException.class) | Ez a megjegyzés akkor használható, ha valamilyen kivételt szeretne kezelni a tesztvégrehajtás során. Például, ha azt szeretné ellenőrizni, hogy egy adott metódus dob-e meghatározott kivételt vagy sem. |
JUnit Példa megjegyzésekre
Hozzunk létre egy osztályt, amely a fontosságról szól JUnit megjegyzéseket egyszerű nyomtatott utasításokkal, és végrehajtani egy tesztfuttató osztállyal:
Step 1) Tekintsük az alábbi Java osztályt, amely különféle metódusokkal rendelkezik, amelyek a fent felsorolt megjegyzésekhez vannak csatolva:
JunitAnnotationsExample.java
package guru99.junit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.util.ArrayList; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; public class JunitAnnotationsExample { private ArrayList<String> list; @BeforeClass public static void m1() { System.out.println("Using @BeforeClass , executed before all test cases "); } @Before public void m2() { list = new ArrayList<String>(); System.out.println("Using @Before annotations ,executed before each test cases "); } @AfterClass public static void m3() { System.out.println("Using @AfterClass ,executed after all test cases"); } @After public void m4() { list.clear(); System.out.println("Using @After ,executed after each test cases"); } @Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); } @Ignore public void m6() { System.out.println("Using @Ignore , this execution is ignored"); } @Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); } @Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); } }
Step 2) hozzunk létre egy tesztfutó osztályt a fenti teszt végrehajtásához:
TestRunner.java
package guru99.junit; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(JunitAnnotationsExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
Várható eredmény
- Az összes teszteset egyenként kerül végrehajtásra, és az összes print utasítás megtekinthető a konzolon.
- A fenti táblázatban leírtak szerint @Before annotation in JUnit, A @BeforeClass [ m1() és m2() metódusok mindegyike előtt, illetve minden teszteset előtt végrehajtásra kerülnek.
- Ugyanígy @After in JUnit, az @afterClass (m3() és m4() metódus) minden teszteset után, illetve minden teszteset után végrehajtásra kerül. Az @ignore (m6() módszer) a teszt figyelmen kívül hagyásaként fog kezelni.
Elemezzük részletesen a fenti java osztályban használt teszteseteket:
- Tekintsük az m5() metódust az alábbiak szerint:
@Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); }
A fenti metódusban egy karakterláncot ad hozzá a „list” változóhoz, így
- list.isEmpty() hamisan fog visszatérni.
- assertFalse(list.isEmpty()) igaznak kell visszatérnie.
- Ennek eredményeként a teszteset fog elhalad.
Mivel csak egy karakterláncot adott hozzá a listához, így a méret egy.
- list.size() Az int értéket „1”-ként kell visszaadnia.
- So assertEquals(1, list.size()) igaznak kell visszatérnie.
- Ennek eredményeként a teszteset fog elhalad.
- Tekintsük az m7() metódust az alábbiak szerint:
@Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); }
Ahogy fentebb tárgyaltuk @Teszt(időtúllépés = 10)az annotációt az időtúllépés kényszerítésére használják a tesztesetben.
- Tekintsük az m8() metódust az alábbiak szerint:
@Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); }
Ahogy fentebb tárgyaltuk @Test (várható) végrehajtása során ellenőrzi a megadott kivételt, így az m8() metódus „Nincs ilyen módszer kivétel”-et dob. Ennek eredményeként a tesztet kivétellel végrehajtják.
Mivel minden teszteset sikeres, ez sikeres tesztvégrehajtást eredményez.
Tényleges eredmény
Mivel a fenti példában három teszteset szerepel, az összes teszteset egyenként kerül végrehajtásra. Lásd az alábbi kimenetet:
Lásd az alábbi nyomtatott nyilatkozatokat, amelyek a konzolon láthatók:
A @BeforeClass használatával, minden teszteset előtt végrehajtva
A @Before megjegyzések használata, minden teszteset előtt végrehajtva
Az @After használata, minden teszteset után végrehajtva
A @Before megjegyzések használata, minden teszteset előtt végrehajtva
A @Test(timeout) használatával az időtúllépés kényszerítésére használható JUnit4 teszteset
Az @After használata, minden teszteset után végrehajtva
A @Before megjegyzések használata, minden teszteset előtt végrehajtva
A @Test(expected) használatával a végrehajtás során ellenőrzi a megadott kivételeket
Az @After használata, minden teszteset után végrehajtva
@AfterClass használatával, minden teszteset után végrehajtva
JUnit Assert Class
Ez az osztály egy csomó állítási módszert kínál, amelyek hasznosak egy teszteset megírásához. Ha az összes állítást teljesítették, a teszteredmények sikeresek. Ha bármelyik assert utasítás meghiúsul, a teszteredmények hibásak.
Amint korábban láthatta, az alábbi táblázat a fontos érvényesítési módszereket és leírást tartalmazza:
S.No. | Módszer | Leírás |
---|---|---|
1. | void assertEquals (várt logikai érték, tényleges logikai érték) | Ellenőrzi, hogy két érték egyenlő-e az Object osztály egyenlő metódusával |
2. | void assertFalse (logikai feltétel) | funkció annak ellenőrzése, hogy egy feltétel hamis-e. |
3. | void assertNotNull(Object objektum) | Az „assertNotNull” funkció annak ellenőrzésére szolgál, hogy egy objektum nem nulla. |
4. | void assertNull(objektum objektum) | Az „assertNull” funkció annak ellenőrzésére szolgál, hogy egy objektum nulla-e. |
5. | void assertTrue (logikai feltétel) | Az „assertTrue” funkció annak ellenőrzésére szolgál, hogy egy feltétel igaz-e. |
6. | érvénytelen hiba () | Ha bármilyen állítási hibát ki akarsz dobni, akkor a fail()-et használod, amely mindig sikertelen ítéletet eredményez. |
7. | void assertSame([String message] | Az „assertSame” funkció annak ellenőrzésére szolgál, hogy a két objektum ugyanarra az objektumra hivatkozzon. |
8. | void assertNotSame([String message] | Az „assertNotSame” funkció annak ellenőrzésére szolgál, hogy a két objektum nem ugyanarra az objektumra hivatkozik. |
JUnit Tesztesetek osztálya
Több teszt futtatásához a TestCase osztály elérhető org.junit.TestCase csomagokat. @Teszt annotáció elmondja JUnit hogy ez a nyilvános void metódus (itt teszteset) amelyhez csatolva lefuttatható tesztesetként.
Az alábbi táblázat néhány fontos módszert mutat be org.junit.TestCase osztály:
S.No. | Módszer | Leírás |
---|---|---|
1. | int countTestCases() | Ez a módszer arra szolgál, hogy megszámolja, hány tesztesetet hajtott végre futtatás (TestResult tr) módszer. |
2. | TestResult createResult() | Ezzel a módszerrel létrehozható a Teszteredmény tárgy. |
3. | String getName() | Ez a metódus egy karakterláncot ad vissza, amely nem más, mint a Próbaper. |
4. | teszteredmény futtatás() | Ezzel a módszerrel olyan tesztet hajtanak végre, amely a Teszteredmény tárgy |
5. | érvénytelen futás (Teszteredmény) | Ez a módszer olyan teszt végrehajtására szolgál, amelynek a Teszteredmény tárgy, amely nem ad vissza semmit. |
6. | void setName(karakterlánc neve) | Ez a módszer az a név beállítására szolgál Próbaper. |
7. | void setUp() | Ez a módszer az erőforrás-társítási kód írására szolgál. pl. Hozzon létre egy adatbázis kapcsolatot. |
8. | void tearDown() | Ezt a módszert használják az erőforrás kiadási kód írásához. pl. az adatbázis-kapcsolat feloldása a tranzakciós művelet végrehajtása után. |
JUnit Teszteredmény osztály
Amikor végrehajt egy tesztet, az eredményt ad vissza (a következő formában: Teszteredmény tárgy). Ez a TestResult objektum használható az eredményül kapott objektum elemzésére. Ez a teszt eredménye lehet sikertelen vagy sikeres.
Az org.junit.TestResult osztályban használt fontos módszereket lásd az alábbi táblázatban:
S.No. | Módszer | Leírás |
---|---|---|
1. | void addError (teszt teszt, dobható t) | Ezt a módszert akkor használjuk, ha hibát kell hozzáadni a teszthez. |
2. | void addFailure(Teszt teszt, AssertionFailedError t) | Ezt a módszert akkor használja, ha egy hibát kell hozzáadnia a hibák listájához. |
3. | void endTest (teszt teszt) | Ez a módszer arra szolgál, hogy értesítse a teszt végrehajtásáról (befejezéséről) |
4. | int errorCount() | Ez a módszer a hiba észlelésére szolgál a teszt végrehajtása során. |
5. | Felsorolás hibák () | Ez a metódus egyszerűen visszaadja a hibák gyűjteményét (felsorolás itt). |
6. | int errorCount() | Ez a módszer a tesztvégrehajtás során észlelt hibák számának lekérésére szolgál. |
7. | érvénytelen futás (TestCase teszt) | Ezt a módszert teszteset végrehajtására használják. |
8. | int runCount() | Ez a módszer egyszerűen számolja a végrehajtott tesztet. |
9. | érvénytelen indítási teszt (teszt) | Ez a módszer arra szolgál, hogy értesítse a teszt elindítását. |
10. | érvénytelen stop() | Ezt a módszert a leállítandó próbaüzem elvégzésére használják. |
JUnit Teszt Suite osztály
Ha több tesztet szeretne végrehajtani meghatározott sorrendben, akkor azt úgy is megteheti, hogy az összes tesztet egy helyen kombinálja. Ezt a helyet tesztlakosztálynak hívják.
Tekintse meg az alábbi táblázatot a legfontosabb módszerekről org.junit.TestSuite osztály:
S.No. | Módszer | Leírás |
---|---|---|
1. | void addTest (teszt teszt) | Ezt a módszert akkor használja, ha tesztet szeretne hozzáadni a csomaghoz. |
2. | void addTestSuite(Class testClass) | Ezt a metódust akkor használja, ha meg szeretné adni az osztályt, miközben tesztet ad hozzá a csomaghoz. |
3. | int countTestCases() | Ezt a módszert akkor használjuk, ha meg akarjuk számolni a tesztesetek számát. |
4. | String getName() | Ezzel a módszerrel kapjuk meg a tesztkészlet nevét. |
5. | érvénytelen futás (Teszteredmény) | Ez a módszer teszt végrehajtására és a teszteredmények begyűjtésére szolgál Teszteredmény tárgy. |
6. | void setName(karakterlánc neve) | Ez a módszer a nevének beállítására szolgál TestSuite. |
7. | Teszt tesztAt(int index) | Ezt a módszert akkor használjuk, ha egy adott indexen szeretnénk visszaadni a tesztet. |
8. | int testCount() | Ezt a módszert akkor használja, ha több tesztet szeretne visszaadni a Suite-ban. |
9. | statikus teszt figyelmeztetés (karakterlánc üzenet) | Ez a módszer egy tesztet ad vissza, amely sikertelen lesz, és egy figyelmeztető üzenetet naplóz. |
Összegzésként
- JUnit hordozható API-t biztosít, amely minden fontos osztályt és Selenium egységteszt megírásához hasznos megjegyzések.
- Osztályok, amelyek nagyon hasznosak teszteset írásakor
- org.junit.Assert
- org.junit.TestCase
- org.junit.TestResult
- org.junit.TestSuite
- Fontos és gyakran használt JUnit megjegyzések listája@Before@BeforeClass@After
@Óra után
@Teszt
@Figyelmen kívül hagyni