TestNG vs JUnit – Rozdíl mezi nimi
Klíčový rozdíl mezi TestNG si JUnit
- TestNG je Java-založený rámec, zatímco JUnit je open-source Unit Testing Framework pro JAVA.
- Porovnání TestNG Vs JUnit, TestNG anotace jsou snadněji použitelné a pochopitelné než JUnit.
- TestNG nám umožňuje vytvářet paralelní testy, zatímco JUnit nepodporuje spouštění paralelních testů.
- In TestNG, Testovací případy lze seskupit, zatímco v JUnit, Seskupování testů není možné.

Co je to TestNG?
TestNG je rámec pro testování automatizace, ve kterém NG znamená „Next Generation“. TestNG je inspirován JUnit který používá anotace (@). TestNG překonává nevýhody JUnit a je určen k výrobě end-to-end testování snadné.
Použití TestNG, můžete vygenerovat správnou zprávu a snadno zjistíte, kolik testovacích případů prošlo, selhalo a přeskočilo. Neúspěšné testovací případy můžete spustit samostatně.
Co je Junit?
JUnit je jednotka s otevřeným zdrojovým kódem Testování Framework pro JAVA. Je to užitečné pro Java Vývojáři psát a spouštět opakovatelné testy. Erich Gamma a Kent Beck jej zpočátku vyvíjeli. Je to instance architektury xUnit. Jak název napovídá, používá se pro Testování jednotek malého kousku kódu.
Vývojáři, kteří dodržují metodologii řízenou testy, musí nejprve napsat a provést test jednotky před jakýmkoli kódem.
Jakmile skončíte s kódem, měli byste provést všechny testy a mělo by to projít. Pokaždé, když je přidán jakýkoli kód, musíte znovu spustit všechny testovací případy a ujistit se, že nic není rozbité.
Rozdíly mezi JUnit si TestNG
Oba TestNG si JUnit4 vypadá podobně, až na jednu nebo dvě funkce. Pojďme si je porovnat, 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
Oba JUnit si TestNG používá anotace a téměř všechny anotace vypadají podobně.
TestNG používá @BeforeMethod ,@AfterMethod podobnou @Before ,@After in JUnit4.
Oba TestNG a Junit4 používá @Test(timeout = 1000) pro časový limit. Další podrobnosti naleznete v tabulce níže-
SNA | Description | TestNG | JUnit 4 |
---|---|---|---|
1 | Anotace testu | @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 | Spustí 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(povolit=nepravda) | @ignorovat |
7 | anotace pro výjimku | @Test(expectedExceptions = ArithmeticException.class) | @Test (očekáváno = ArithmeticException.class) |
8 | timeout | @Test(časový limit = 1000) | @Test(časový limit = 1000) |
9 | Spustí se před všemi testy v sadě | @BeforeSuite | n / a |
10 | Spustí se po všech testech v sadě | @AfterSuite | n / a |
11 | Spustí se před testovacím spuštěním | @Před testem | n / a |
12 | Spustí se po zkušebním běhu | @Po testu | 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 zde uvedených skupin | @AfterGroups | n / a |
Test sady
Sady se používají k provádění více testů společně. Suity lze vytvořit pomocí obou TestNG si JUnit4. Suity jsou však výkonnější v TestNG protože používá velmi odlišný způsob provádění testů. Pojďme to pochopit pomocí fragmentu kódu, jak je uvedeno níže:
Použití JUnit4
Níže uvedená třída popisuje použití sady při práci s JUnit4:
package guru99.junit; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ SuiteTest1.class, SuiteTest2.class, }) public class JunitTest { // This class remains empty,it is used only as a holder for the above annotations }
Použití TestNG
TestNG používá xml ke spojení všech testů na jednom místě. Níže xml popisuje použití sady při práci TestNG:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My test suite"> <test name="testing"> <classes> <class name="com.guru99.SuiteTest1" /> <class name="com.guru99.SuiteTest2" /> </classes> </test> </suite>
Ignorovat test
Pomocí obou můžeme přeskočit test. Podívejme se na to pomocí příkladu kódu, jak je uvedeno níže:
Použití JUnit4
Níže uvedený fragment kódu popisuje použití anotace @ignore při práci s JUnit4:
@Ignore public void method1() { System.out.println("Using @Ignore , this execution is ignored"); }
Použití 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("Method should be ignored as it's not ready yet"); }
Test výjimek
Testování výjimek je k dispozici v obou TestNG si JUnit4. Používá se ke kontrole, která výjimka je vyvolána z testu?
Použití JUnit4
Níže uvedený fragment kódu popisuje použití testu výjimky při práci s JUnit4:
@Test(expected = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
Použití TestNG
Níže uvedený fragment kódu popisuje použití testu výjimky při práci s TestNG:
@Test(expectedExceptions = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
Timeout
Tato funkce je implementována v TestNg a JUnit4.Timeout se používá k ukončení testu, který trvá déle, než je zadaná doba (v milisekundách).
Použití JUnit4
Níže uvedený fragment kódu popisuje použití testu časového limitu při práci s JUnit4:
@Test(timeout = 1000) public void method1() { while (true); }
Použití 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 jednodušší a čitelnější přístup k testování známý jako parametrizovaný test. Obě TestNG si JUnit podporuje parametrizovaný test, ale liší se ve způsobu, jakým definují hodnotu parametru. Podívejme se na to jeden po druhém.
Použití JUnit4
Anotace „@RunWith“ a „@Parameter“ se používají k poskytnutí hodnoty parametru pro test jednotky. Anotace @Parameters musí vrátit List[]. Tento parametr bude předán do konstruktoru třídy jako argument.
@RunWith(value = Parameterized.class) public class JunitTest{ privateint number; public JunitTest6(int number) { this.number = number; } @Parameters public static Collection<Object[]> data() { Object[][] data = new Object[][] { { 1 }, { 2 }, { 3 }, { 4 } }; returnArrays.asList(data); } @Test public void parameterTest() { System.out.println("Parameterized Number is : " + number); } }
Použití TestNG
In TestNG, soubor XML nebo „@DataProvider“ se používá k poskytnutí parametru pro testování.
Zde anotace @Parameters deklarovaná v metodě potřebuje parametr pro testování. Data použitá jako parametr poskytne v TestNGkonfigurační soubory XML. Tímto způsobem můžeme znovu použít singl Testovací případ s různými datovými sadami a můžeme získat různé výsledky.
public class Test1 { @Test @Parameters(value="number") public void parameterTest(int number) { System.out.println("Parameterized Number is : " + number); } }
Viz níže soubor xml, který se má použít pro výše uvedenou třídu:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My test suite"> <test name="testing"> <parameter name="number" value="2"/> <classes> <class name="com.guru99.Test1" /> </classes> </test> </suite>
Shrnutí
Viděli jsme JUnit4 a TestNG srovnání v detailech. Také jsme viděli, že oba jsou podobné kromě parametrizovaného testu a testu závislosti. Stručně lze říci, že na základě flexibility a požadavků si můžeme vybrat kteroukoli z nich pro testování jednotek.