TestNG Vs JUnit: Aký je rozdiel?

Obsah:

Anonim

Testng aj Junit sú testovacím rámcom používaným pre Unit Testing. TestNG je podobný JUnit. Je k nemu pridaných ešte niekoľko funkcií, vďaka ktorým je TestNG výkonnejší ako JUnit.

Tento výukový program je zameraný hlavne na analýzu funkcií JUnit a TestNG. Pomáha vývojárom rozhodnúť sa, aký rámec by sa mal použiť na testovanie jednotiek. Poďme najskôr analyzovať podobnosti medzi TestNG a JUnit4.

TestNG je testovací rámec inšpirovaný JUnit a NUnit.

Tu je tabuľka, ktorá zobrazuje funkcie podporované programami JUnit a TestNG.

Porovnanie funkcií JUnit4 a TestNG

TestNG aj JUnit4 vyzerajú podobne, až na jednu alebo dve funkcie. Poďme mať porovnanie medzi dvoma, aby sme sa rýchlo rozhodli, ktorá technológia je pre Unit Testing priaznivejšia. Nasledujúca tabuľka zdôrazňuje funkcie podporované oboma:

Anotácie

JUnit aj TestNG používajú anotácie a takmer všetky anotácie vyzerajú podobne.

TestNG používa @BeforeMethod, @ AfterMethod podobné ako @Before, @ After v JUnit4.

TestNG aj Junit4 používajú ako časový limit @Test (časový limit = 1 000). Ďalšie podrobnosti nájdete v nasledujúcej tabuľke -

SN Popis TestNG JUnit 4
1 Skúšobná anotácia @Test @Test
2 Vykoná sa pred vyvolaním prvej testovacej metódy v aktuálnej triede @BeforeClass @BeforeClass
3 Vykoná po všetkých testovacích metódach v aktuálnej triede @Po hodine @Po hodine
4 Vykonáva sa pred každou skúšobnou metódou @BeforeMethod @ Predtým
5 Vykonáva sa po každej testovacej metóde @AfterMethod @ Potom
6 anotácia na ignorovanie testu @Test (enable = false) @ignorovať
7 anotácia pre výnimku @Test (expectExceptions = ArithmeticException.class) @Test (očakáva sa = ArithmeticException.class)
8 čas vypršal @Test (časový limit = 1 000) @Test (časový limit = 1 000)
9 Vykoná sa pred všetkými testami v balíku @BeforeSuite n / a
10 Vykoná sa po všetkých testoch v balíku @AfterSuite n / a
11 Spustí sa pred spustením testu @BeforeTest n / a
12 Vykoná sa po testovacej prevádzke @ AfterTest n / a
13 Vykoná sa pred vyvolaním prvej testovacej metódy, ktorá patrí do ktorejkoľvek z týchto skupín @BeforeGroups n / a
14 spustiť po poslednej testovacej metóde, ktorá patrí do ktorejkoľvek zo skupín tu @AfterGroups n / a

Test balíka

Sady sa používajú na spoločné vykonávanie viacerých testov. Sady je možné vytvárať pomocou TestNG aj JUnit4. V TestNG sú však balíčky výkonnejšie, pretože na vykonávanie testov používa veľmi odlišnú metódu. Poďme to pochopiť pomocou fragmentu kódu, ako je uvedené nižšie:

Pomocou JUnit4

Nižšie uvedená trieda popisuje použitie balíka pri práci s JUnit4:

balíček guru99.junit;import org.junit.runner.RunWith;import org.junit.runners.Suite;@RunWith (Suite.class)@ Suite.SuiteClasses ({SuiteTest1.class,SuiteTest2.class,})verejná trieda JunitTest {// Táto trieda zostáva prázdna, používa sa iba ako držiak pre vyššie uvedené anotácie}

Pomocou TestNG

TestNG používa xml na zhromažďovanie všetkých testov na jednom mieste. Nižšie xml popisuje použitie balíka pri práci s TestNG:


Ignorovať test

Použitím oboch môžeme test preskočiť. Pozrime sa na príklad kódu, ako je uvedené nižšie:

Pomocou JUnit4

Fragment kódu nižšie popisuje použitie anotácie @ignore pri práci s JUnit4:

@Ignorovaťmetóda verejnej neplatnosti1 (){System.out.println ("Pri použití @Ignore je toto spustenie ignorované");}

Pomocou TestNG

Fragment kódu nižšie popisuje použitie anotácie @Test (enabled = false) pri práci s TestNG:

@Test (povolené = nepravdivé)public void TestWithException (){System.out.println ("Metóda by mala byť ignorovaná, pretože ešte nie je pripravená");}

Test výnimiek

Výnimočné testovanie je k dispozícii v TestNG aj JUnit4. Používa sa na kontrolu, ktorá výnimka je vyhodená z testu?

Pomocou JUnit4

Fragment kódu nižšie popisuje použitie testu výnimiek pri práci s JUnit4:

@Test (očakáva sa = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}

Pomocou TestNG

Fragment kódu nižšie popisuje použitie testu výnimiek pri práci s TestNG:

@Test (expectExceptions = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}

Čas vypršal

Táto funkcia je implementovaná v TestNg aj JUnit4.Timeout sa používa na ukončenie testu, ktorý trvá dlhšie ako stanovený čas (v milisekundách).

Pomocou JUnit4

Fragment kódu nižšie popisuje použitie testu časového limitu pri práci s JUnit4:

@Test (časový limit = 1 000)metóda verejnej neplatnosti1 (){while (true);}

Pomocou TestNG

Fragment kódu nižšie popisuje použitie testu časového limitu pri práci s TestNG:

@Test (timeOut = 1 000)metóda verejnej neplatnosti1 (){while (true);}

Parametrizovaný test

JUnit poskytuje ľahší a čitateľnejší prístup k testu známemu ako parametrizovaný test. TestNG aj JUnit podporujú parametrizovaný test, líšia sa však v spôsobe definovania hodnoty parametra. Uvidíme tento jeden po druhom.

Pomocou JUnit4

Poznámky „@RunWith“ a „@Parameter“ sa používajú na poskytnutie hodnoty parametra pre jednotkový test. Anotácia @Parametre musí vrátiť zoznam []. Tento parameter bude odovzdaný do konštruktora triedy ako argument.

@RunWith (hodnota = Parameterized.class)verejná trieda JunitTest {privátne číslo;verejný JunitTest6 (int číslo){this.number = number;}@Parametreverejná statická zbierka  údaje (){Objekt [] [] data = nový Objekt [] [] {{1}, {2}, {3}, {4}};returnArrays.asList (údaje);}@Testpublic void parameterTest (){System.out.println ("Parametrizované číslo je: + číslo);}}

Pomocou TestNG

V TestNG sa na poskytnutie parametra na testovanie používa súbor XML alebo „@DataProvider“.

Tu anotácia @Parameters deklarovaná v metóde vyžaduje parameter na testovanie. Údaje použité ako parameter poskytnú v konfiguračných súboroch XML TestNG. Týmto spôsobom môžeme znova použiť jeden testovací prípad s rôznymi množinami údajov a môžeme získať rôzne výsledky.

verejná trieda Test1 {@Test@Parameters (hodnota = "číslo")public void parameterTest (int číslo){System.out.println ("Parametrizované číslo je: + číslo);}}

Nižšie uvedený xml súbor, ktorý sa má použiť pre triedu vyššie:



Zhrnutie:

Podrobne sme videli porovnanie JUnit4 a TestNG. Tiež sme videli, že obe sú si podobné, okrem parametrizovaného testu a testu závislosti. Stručne povedané, na základe flexibility a požiadaviek si môžeme zvoliť ktorýkoľvek z nich pre Unit Testing.