Testng i Junit jsou testovací framework používaný pro Unit Uniting. TestNG je podobný JUnit. Je k němu přidáno několik dalších funkcí, díky nimž je TestNG výkonnější než JUnit.
Tento kurz je zaměřen hlavně na analýzu funkcí JUnit a TestNG. Pomáhá vývojářům rozhodnout, který framework by měl být použit pro Unit Testing. Pojďme nejprve analyzovat podobnosti mezi TestNG a JUnit4.
TestNG je testovací rámec inspirovaný JUnit a NUnit.
Tady je tabulka, která ukazuje funkce podporované JUnit a TestNG.
Porovnání funkcí JUnit4 a TestNG
TestNG i JUnit4 vypadají podobně, kromě jedné nebo dvou funkcí. Pojďme si udělat srovnání mezi těmito dvěma, abychom se rychle rozhodli, která technologie je pro Unit Testing výhodnější. Níže uvedená tabulka zdůrazňuje funkce podporované oběma:
Anotace
Jak JUnit, tak TestNG používají anotace a téměř všechny anotace vypadají podobně.
TestNG používá @BeforeMethod, @ AfterMethod podobné @Before, @ After v JUnit4.
TestNG i Junit4 používají k vypršení časového limitu @Test (časový limit = 1000). Další podrobnosti najdete v tabulce níže -
SN | Popis | TestNG | JUnit 4 |
---|---|---|---|
1 | Testovací anotace | @Test | @Test |
2 | Spustí se před vyvoláním první testovací metody v aktuální třídě | @Před hodinou | @Před hodinou |
3 | Provede se po všech testovacích metodách v aktuální třídě | @Po hodině | @Po hodině |
4 | Provádí se před každou testovací metodou | @BeforeMethod | @Před |
5 | Provádí se po každé testovací metodě | @AfterMethod | @Po |
6 | anotace k ignorování testu | @Test (enable = false) | @ignorovat |
7 | anotace pro výjimku | @Test (expectExceptions = ArithmeticException.class) | @Test (očekává se = ArithmeticException.class) |
8 | Časový limit | @Test (časový limit = 1000) | @Test (časový limit = 1000) |
9 | Provádí se před všemi testy v sadě | @BeforeSuite | n / a |
10 | Provede se po všech testech v sadě | @AfterSuite | n / a |
11 | Provede se před spuštěním testu | @BeforeTest | n / a |
12 | Spustí se po spuštění testu | @AfterTest | n / a |
13 | Spustí se před vyvoláním první testovací metody, která patří do kterékoli z těchto skupin | @BeforeGroups | n / a |
14 | spustit po poslední testovací metodě, která patří do některé ze skupin zde | @AfterGroups | n / a |
Test sady
Suite se používají k provádění více testů společně. Sady lze vytvořit pomocí TestNG i JUnit4. V TestNG jsou však sady výkonnější, protože pro provádění testů používá velmi odlišnou metodu. Rozumíme tomu pomocí fragmentu kódu, jak je uvedeno níže:
Používání JUnit4
Níže uvedená třída popisuje použití sady při 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,})veřejná třída JunitTest {// Tato třída zůstává prázdná, používá se pouze jako držák výše uvedených anotací}
Pomocí TestNG
TestNG používá xml k seskupení všech testů na jednom místě. Níže xml popisuje použití sady při práci s TestNG:
Ignorovat test
Pomocí obou můžeme test přeskočit. Podívejme se ho pomocí příkladu kódu, jak je uvedeno níže:
Používání JUnit4
Níže uvedený fragment kódu popisuje použití anotace @ignore při práci s JUnit4:
@Ignorovatpublic void method1 (){System.out.println ("Při použití @Ignore je toto spuštění ignorováno");}
Pomocí TestNG
Níže uvedený fragment kódu popisuje použití anotace @Test (enabled = false) při práci s TestNG:
@Test (enabled = false)public void TestWithException (){System.out.println ("Metoda by měla být ignorována, protože ještě není připravena");}
Test výjimek
Testování výjimek je k dispozici jak v TestNG, tak v JUnit4. Používá se ke kontrole, která výjimka je vyvolána z testu?
Používání JUnit4
Níže uvedený fragment kódu popisuje použití testu výjimek při práci s JUnit4:
@Test (očekává se = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}
Pomocí TestNG
Níže uvedený fragment kódu popisuje použití testu výjimek při práci s TestNG:
@Test (expectExceptions = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}
Časový limit
Tato funkce je implementována jak v TestNg, tak v JUnit4. Timeout se používá k ukončení testu, který trvá déle než zadaný čas (v milisekundách).
Používání JUnit4
Níže uvedený fragment kódu popisuje použití testu časového limitu při práci s JUnit4:
@Test (časový limit = 1000)public void method1 (){while (true);}
Pomocí TestNG
Níže uvedený fragment kódu popisuje použití testu časového limitu při práci s TestNG:
@Test (timeOut = 1000)public void method1 (){while (true);}
Parametrizovaný test
JUnit poskytuje snadnější a čitelnější přístup k testování známému jako Parameterized test. TestNG i JUnit podporuje parametrizovaný test, ale liší se ve způsobu, jakým definují hodnotu parametru. Podívejme se jeden po druhém.
Používání JUnit4
Poznámky „@RunWith“ a „@Parameter“ slouží k zadání hodnoty parametru pro test jednotky. Anotace @Parameters musí vrátit List []. Tento parametr bude předán do konstruktoru třídy jako argument.
@RunWith (hodnota = Parameterized.class)veřejná třída JunitTest {privátní číslo;public JunitTest6 (int číslo){this.number = number;}@ Parametrypublic static Collection
Pomocí TestNG
V TestNG se k poskytnutí parametru pro testování používá soubor XML nebo „@DataProvider“.
Zde @Parameters anotace deklarovaná v metodě, potřebuje parametr pro testování. Data použitá jako parametr budou poskytována v konfiguračních souborech XML TestNG. Tímto způsobem můžeme znovu použít jeden testovací případ s různými datovými sadami a můžeme získat různé výsledky.
veřejná třída Test1 {@Test@Parameters (hodnota = "číslo")public void parameterTest (int číslo){System.out.println ("Parametrované číslo je: + číslo);}}
Níže uvedený soubor XML, který se má použít pro třídu výše:
Souhrn :
Podrobně jsme viděli srovnání JUnit4 a TestNG. Také jsme viděli, že oba jsou podobné, kromě parametrizovaného testu a testu závislosti. Stručně řečeno, na základě flexibility a požadavku si můžeme vybrat kterýkoli z nich pro Unit Testing.
- další