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:

  1. 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.
  1. 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.

  1. 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:

JUnit Példa megjegyzésekre
JUnit Példa megjegyzésekre

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