junit vs testng what are differences
Komplexní srovnání mezi rámci JUnit Vs TestNG. Zahrnuje srovnání anotací a srovnání funkcí s příklady:
V předchozím tutoriálu jsme se naučili anotaci DisplayName a provádění podmíněného testu na základě různých kritérií, jako je verze JRE, proměnné prostředí atd. Také jsme se zabývali několika důležitými otázkami týkajícími se tohoto tématu.
Vzhledem k tomu, že jsme se o JUnit neustále učili v předchozích tutoriálech, bude tento fungovat jako oddych pro naše publikum, protože na chvíli přesuneme naše zaměření z JUnit jako jediné agendy na srovnání JUnit vs TestNG.
=> Podívejte se na průvodce výcvikem Perfect JUnit zde.
Co se naučíte:
- JUnit Vs TestNG: Srovnání
- Závěr
JUnit Vs TestNG: Srovnání
Funkce | JUnit | TestNG |
---|---|---|
Časový limit pro testy | Ano | Ano |
Rámec opensource | Ano JUnit je framework opensource | Ano TestNG je framework opensource |
Uživatelsky přívětivý | JUnit je distribuován do různých modulů, například: ? Pro parametrizaci možná budete potřebovat JUnit Jupiter. ? Díky tomu je JUnit ve srovnání s TestNG mírně těžkopádný | Všechny funkce TestNG přicházejí v jednom modulu. Díky tomu je TestNG uživatelsky přívětivější. |
Hlavní podpora IDE ( Příklad: Eclipse, IntelliJ) | Ano Oba podporují většinu IDE stejně | Ano Oba podporují většinu IDE stejně |
Implementace anotací | Ano JUnit pracuje na anotacích s malými variacemi pro různé funkce | Ano TestNG pracuje na anotacích s malými variacemi pro různé funkce |
Implementace tvrzení | Ano JUnit poskytuje dostatek tvrzení k ověření očekávaných a skutečných výsledků s některými variantami tvrzení v TestNG | Ano TestNG také podporuje obrovský seznam tvrzení pro srovnání očekávaných a skutečných výsledků. Kromě toho TestNG poskytuje dva mechanismy pro tvrzení - Soft Assertion a Hard Assertion |
Výjimky | Ano JUnit poskytuje funkci pro test výjimek s mírnou variací na TestNG | Ano TestNG také poskytuje funkci pro test výjimek |
Parametrizované testy | Ano JUnit podporuje parametrizované testy | Ano TestNG také podporuje parametrizované testy |
Testovací sada | Ano JUnit podporuje použití testovacích sad | Ano TestNG také podporuje Test Suite. |
Test závislosti | Ne JUnit nepodporuje funkci pro test závislosti | Ano Toto je pokročilá funkce v TestNG přes JUnit. S touto funkcí lze jednu metodu nastavit jako závislou na druhé, takže metoda bude spuštěna až po spuštění závislé metody a předání, jinak závislý test nebude spuštěn. |
Paralelní provedení testu | Ne Paralelní spuštění není v JUnit k dispozici | Ano TestNG podporuje paralelní provádění testů, ale JUnit není. Existuje TestNG xml, kde lze nastavit paralelní provádění |
Integrace Maven | Ano Oba nástroje podporují integraci Maven | Ano Oba nástroje podporují integraci Maven |
Implementace předpokladů | Ano Předpoklady se používají k přeskočení testů založených na určitých předpokladech nebo podmínkách a to platí pouze v JUnit. | Ne TestNG nepodporuje Předpoklady |
Pořadí provedení zkoušky | Ano Junit podporuje pořadí provádění testu. | Ano TestNG podporuje pořadí provádění testu |
Implementace posluchačů | Ano JUnit podporuje posluchače nikoli prostřednictvím anotací, ale prostřednictvím rozhraní Listeners API. | Ano TestNG podporuje posluchače prostřednictvím anotací. |
Ignorovat testy | Ano Oba podporují deaktivaci testů, ale JUnit podporuje deaktivaci testů pro provádění na základě různých podmínek | Ano Obě podporují deaktivaci testů |
Hlášení | Ano JUnit musí být integrován s mavenem pro generování zpráv HTML | Ano TestNG má vestavěné zprávy HTML. Může být integrován také s mavenem nebo externími knihovnami pro vytváření zpráv, jako je zpráva ATU nebo zprávy o rozsahu |
Srovnání anotací
TestNG a JUnit jsou rámce pro testování jednotek ze světa Javy. Oba implementují velmi bližší a podobné funkce. V této části se podíváme na některé podobnosti při implementaci několika funkcí, zatímco bychom si také mohli prohlédnout několik dalších funkcí, které jsou implementovány odlišně v JUnit a TestNG.
# 1) Anotace zkušební metody
Neexistuje žádný rozdíl ve způsobu, jakým specifikujeme metodu jako testovací metodu v JUnit i TestNG.
JUnit 5 | TestNG |
---|---|
@Test | @Test |
# 2) Anotace týkající se sady
- Metoda s anotací @BeforeSuite se provede jednou před spuštěním aktuální testovací sady.
- Tato anotace je použitelná pouze v TestNG.
JUnit 5 | TestNG |
---|---|
Nelze použít | @BeforeSuite |
# 3) Anotace metody před Class
Toto je anotace pro metodu, která se má provést jednou před spuštěním první testovací metody ve třídě.
JUnit 5 | TestNG |
---|---|
@BeforeAll | @Před hodinou |
# 4) Anotace metody před testem
- Tato anotace se provede jednou před metodami deklarovanými uvnitř značky testng.xml.
- Tato anotace je k dispozici pouze pro TestNG.
JUnit 5 | TestNG |
---|---|
Nelze použít | @BeforeTest |
# 5) Anotace k metodě, která má být provedena před každou metodou s vyvoláním @Test
JUnit 5 | TestNG |
---|---|
@ Předtím každý | @BeforeMethod |
# 6) Anotace k metodě, která se má provést po každé metodě s vyvoláním @Test
JUnit 5 | TestNG |
---|---|
@AfterEach | @AfterMethod |
# 7) Anotace metody po testu
- Tato anotace se provede jednou za metodami deklarovanými uvnitř značky testng.xml.
- Tato anotace je k dispozici pouze pro TestNG.
JUnit 5 | TestNG |
---|---|
Nelze použít | @AfterTest |
# 8) Anotace metody po třídě
Toto je anotace pro metodu, která se má provést jednou po spuštění poslední testovací metody ve třídě.
JUnit 5 | TestNG |
---|---|
@Po všem | @Po hodině |
# 9) Annotation to disable the execution of the Test method.
- JUnit 5 poskytuje anotaci k deaktivaci konkrétního provedení testu.
- TestNG poskytuje atribut pro @Test, tj. „Povoleno“ s booleovskou hodnotou, která rozhoduje, zda by provedení metody bylo zakázáno nebo povoleno
JUnit 5 | TestNG |
---|---|
@ignorovat | @Test (enabled = false) |
Odkazují na Výukový program 7 Vynechání provedení pochopit, jak zakázat testy v JUnit4 vs JUnit 5
# 10) Časový limit anotace
Anotace je stejná pro JUnit 5 a TestNG
JUnit 5 | TestNG |
---|---|
@Test (časový limit = 2000) | @Test (časový limit = 2000) |
# 11) Očekávaný atribut výjimky
- Třída výjimek uvádí, že při provedení testu je vyvolána výjimka dané třídy.
- To je podporováno v JUnit i TestNG se změnami ve způsobu, jakým jsou oba deklarovány.
JUnit 5 | TestNG | |
---|---|---|
@Test (očekává se = NullPointerException.class) | @Test (expectException = NullPointerException.class) |
# 12) Anotace týkající se sady
- Metoda s anotací @AfterSuite se provede jednou po spuštění aktuální testovací sady.
- Tato anotace je použitelná pouze v TestNG.
JUnit 5 | TestNG |
---|---|
Nelze použít | @AfterSuite |
# 13) Skupinová anotace
- Anotace je k dispozici pouze v TestNG.
- Metoda s anotací @BeforeGroups se spustí před spuštěním testovacích metod patřících do konkrétní skupiny.
JUnit 5 | TestNG | |
---|---|---|
Nelze použít | @BeforeGroups |
- Anotace je k dispozici pouze v TestNG.
- Metoda s anotací @BeforeGroups se spustí po spuštění testovacích metod patřících do konkrétní skupiny.
JUnit 5 | TestNG |
---|---|
Nelze použít | @AfterGroups |
# 14) Poznámky související s pořadím exekuce
JUnit i TestNG podporují explicitní nastavení pořadí testů pro provedení. Jinými slovy, stanovení priority pro testovací případy.
- JUnit 5 má jako vstupní parametr pro anotaci @TestMethodOrder () s vestavěnou třídou balíčku MethodOrderer - Alphanumeric.class nebo OrderAnnotation.class nebo Random.class.
Odkazují na Tutorial 9 - Junit Test Execution Order Další informace o nastavení pořadí provádění testu v JUnit.
- TestNG obsahuje atribut ‚priorita 'pro anotaci @Test, který přijímá číselnou hodnotu.
JUnit 5 | TestNG |
---|---|
@TestMethodOrder (Alphanumeric.class) | @Test (priorita = 1) |
Základní program pro TestNG a JUnit 4
# 1) TestNG kód
package newtest.com; import org.testng.annotations.Test; import org.testng.annotations.BeforeMethod; import org.testng.annotations.AfterMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.BeforeClass; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeTest; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeSuite; import org.testng.annotations.AfterSuite; public class NewTestng { @Test(dataProvider = 'dp') public void f(Integer n, String s) { System.out.println(' * * * * * * *Parameterized method * * * * * * * * * '); System.out.println('Integer '+n+' String '+s); System.out.println(' * * * * * * * * * * * * * * * * '); } @BeforeMethod public void beforeMethod() { System.out.println('Before Method'); } @AfterMethod public void afterMethod() { System.out.println('After Method'); } @DataProvider public Object()() dp() { return new Object()() { new Object() { 1, 'a' }, new Object() { 2, 'b'}, }; } @BeforeClass public void beforeClass() { System.out.println('Before Class'); } @AfterClass public void afterClass() { System.out.println('After Class'); } @BeforeTest public void beforeTest() { System.out.println('Before Test'); } @AfterTest public void afterTest() { System.out.println('After Test'); } @BeforeSuite public void beforeSuite() { System.out.println('Before Suite'); } @AfterSuite public void afterSuite() { System.out.println('After Suite'); } }
Očekávaný výstup:
# 2) Kód JUnit 4
package demo.tests; import static org.junit.Assert.*; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.BeforeClass; import org.junit.AfterClass; public class JunitTest { @Parameterized.Parameters public static Object()() data() { return new Object(3)(0); } @BeforeClass public static void beforeClass() { System.out.println('Before Class'; } @Before public void beforeMethod() { System.out.println('Before Method'); } @Test public void f() { System.out.println(' * * * * * * *test * * * * * * * * * '); int n=10; System.out.println('Integer '+n); System.out.println(' * * * * * * * * * * * * * * * * '); } @After public void afterMethod() { System.out.println('After Method'); } @AfterClass public static void afterClass() { System.out.println('After Class'); } }
Očekávaný výstup:
JUnit 5 vs TestNG: Rozdíl funkcí s příklady
# 1) Testovací sada
- Sada testů je sbírka testů, což znamená, že zabalíme několik testovacích případů z více tříd dohromady.
- Přístup, který TestNG používá, je ve srovnání s přístupem JUnit odlišný a výkonný.
Testovací sada v JUnit 5
Pojďme se rychle podívat na to, jak JUnit 5 aplikuje testovací sadu.
Odkazují na Tutorial 8 -JUnit Test Suites & Filtering Testovací pouzdra pro lepší pochopení implementace testovací sady v JUnit 4 a JUnit 5.
@RunWith(JUnitPlatform.class) @SelectClasses({JUnit5TestCase1.class, JUnit5TestCase2.class }) public class JUnitTestSuite { }
Testovací sada v TestNG
TestNG používá XML jako níže uvedenou šablonu k zabalení všech logicky se připojujících testovacích tříd
# 2) Parametrizovaný test
TestNG i JUnit umožňují parametrizaci testů, což není nic jiného než spuštění stejných testů s datovými variantami.
Parametrizovaný test v JUnit 4
@RunWith(value=Parameterized.class) public class JUnitclass{ int n; public JUnitclass (int num){ this.n=num; } @Parameters public static Iterable data(){ Object()() objectArray =new Object()() {{1},{2},{3}}; returnArrays.asList(objectArray); } @Test public void Junittst(){ System.out.println(“Multiples of 2 are :”+ 2*n); } }
Parametrizovaný test v TestNG
Existují 2 způsoby, jak můžete použít parametrizaci v TestNG
- @Parametry a procházení TestNG XML
- Anotace @DataProvider
a) @Parameters a procházení TestNG XML
public class testins{ @Test @Parameters(value=”env_pd”) public void paramEnv(str env_pd){ If(env_pd=”QA”){ url=”definetest.com” } else if(env_pd=”accpt”){ url=”defineacc.com” }}}
XML pro stejné
b) Poskytovatel dat
Anotace DataProvider vždy vrací Object () (), což je pole objektů.
@DataProvider(name='state') public Object()() getDataFromDataprovider(){ return new Object()() { { 'Maharashtra', 'Pune' }, { 'Karnataka', 'Bangalore' }, { 'Kerala', 'Trivandrum' } }; @Test(dataProvider=”state”) public void paramMethd(str stateName, str cityName){ System.out.println(stateName+” ”+cityName); }
# 3) Časový limit
Pokud se konkrétní test nedokončí ve stanoveném čase, získá časový limit. U jiných se vlákno přeruší.
nejlepší špionážní aplikace pro mobilní telefony
Časový limit v JUnit
Existují různé přístupy k implementaci časového limitu v JUnit. Tyto jsou:
- Používání obvyklého časového limitu se specifickými milisekundami
- Použití časového limitu s tvrzením
- Používání globálního časového limitu
Budeme mít podrobný návod zaměřený na časový limit pro JUnit 4 a JUnit 5.
Níže je úryvek zobrazující použití obvyklého časového limitu v JUnit 5:
@Test(timeout = 5000) public void testTimeout() throws InterruptedException { while (true) { } }
Výše uvedený časový limit testu po 5 sekundách.
Časový limit v TestNG
TestNG také používá jednoduchý způsob implementace Timeout:
@Test(timeout = 5000) public void testTimeout() throws InterruptedException { while (true) { } }
# 4) Výjimka Test
Test výjimek zajišťuje, že když je tato předdefinovaná výjimka vyvolána, je elegantně zachycena a upozorněna na protokolech.
Test výjimek v JUnit 4
@Test (expected = NumberFormatException.class) public void converttoint() { Int j=Integer.parseInt(“Four”); }
K dispozici bude samostatný výukový program, který podrobně popisuje výjimky pro JUnit 4 a 5.
Test výjimek v TestNG
V prohlášení o testu výjimek v TestNG došlo k mírné změně:
@Test (expectedExceptions = NumberFormatException.class) public void converttoint() { Int j=Integer.parseInt(“Four”); }
# 5) Zakázat test
TestNG i JUnit umožňují zakázat provádění testu.
Zakázaný test v JUnit 5
@Disabled annotation when used at the top of the class, all the tests within the class are skipped for execution. Anotace při použití nad konkrétní metodou @Test je pro provedení zakázána v konkrétním testovacím případě.
import org.junit.AfterClass; @Disabled('the testcase is under development') public class JUnitProgram {
Zakázaný test v TestNG
TestNG umožňuje testu zakázat provádění testu, když je atribut „enabled“ anotace @Test nastaven na hodnotu false a je povolen, pokud je atribut nastaven na hodnotu true. Pokud musí být povoleny všechny testy ve třídě, pak explicitně označte enabled = true pro každou metodu @Test.
Níže je fragment kódu, který ukazuje přeskočení testu.
@Test(enabled=false) public void f_validate(){ // let us skip this function}
# 6) Skupinové testy
Na různých webech a fórech došlo k rozporuplným tvrzením, kde lidé uvedli, že JUnit nikdy nepodporoval seskupování testů s konkrétním názvem skupiny.
Anotace @BeforeGroups a @AfterGroups přicházejí pouze s TestNG, avšak seskupení je povoleno jak v JUnit 4, tak v JUnit 5. Zde si rychle ukážeme použití skupinových testů v JUnit 5. Skupinové testy se v JUnit 4 a Značky označují jako Kategorie v JUnit 5.
Můžete se odvolat na Výukový program 8 - JUnit Test Suites & Filtering Tests pro podrobnosti o použití v JUnit.
Skupinové testy v JUnit 5
@Tag(“Regression”) @Test public void junitMethod1(){} @Tag(“SmokeTest”) @Test public void junitMethod2(){
Fragment kódu z JUnit5TestSuite.java:
Níže uvedený kód zahrnuje skupinu s názvem „Regrese“ a vylučuje skupinu „SmokeTest“, která vyvozuje, že bude spuštěn junitMethod1 (), avšak junitMethod2 () je vyloučen.
jak používat selektor css v selenu
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeTags(“Regression”) @ExcludeTags(“SmokeTest”) public class JUnit5TestSuite { }
Skupinové testy v TestNG
Pokud výše uvedený úryvek musí být interpretován v TestNG, pak níže je kód pro stejný:
@Test(groups={“Regression” }) public void junitMethod1(){} @Test(groups={“SmokeTest” }) public void junitMethod2(){}
TestNG XML je následující:
Zde jsou metody regresní skupiny zahrnuty do běžec, zatímco zbytek skupin včetně SmokeTest je vyloučen.
# 7) Paralelní testy
Toto je funkce, která je k dispozici pouze u TestNG. Testovací případy jsou obvykle druhem vláken, která se vyvolávají jeden po druhém. Pokud si však přejete ušetřit na čase spuštění, můžete to v TestNG řídit nastavením testů, které se mají spouštět paralelně, a zadáním počtu vláken, která je potřeba spustit najednou.
Stručně si ukážeme použití závisí na metodách zde a nebudeme diskutovat závisí na skupinách.
Závislý test na jiné metodě se nastavuje pomocí TestNG XML následovně:
# 8) Závislé testy
Závislé testy jsou pokročilé funkce dostupné pouze s TestNG. Závislosti mohou být na testu nebo na skupině.
@Test mytest1(){ System.out.println(“My test : mytest1”); } @Test (dependensOnMethods={“mytest1”}) public void mytest2(){ System.out.println(“My test : mytest2”); }
Ve výše uvedeném programu, protože mytest2 závisí na mytest1, nejprve se spustí mytest1 a poté se spustí mytest2. Pokud selže mytest1, nebude vyvolán mytest2. Takto lze předdefinovat závislé testovací případy pro ovládání konkrétního pracovního postupu, který chcete provést.
# 9) Posluchači
Posluchači poslouchají každou událost, ke které dojde v rámci testů. Posluchače jsou podporovány jak v JUnit, tak v TestNG. Pokud si tedy přejete provést určité úkoly nebo zobrazit konkrétní zprávu v protokolu před zahájením testu, po dokončení testu, při přeskočení testu, při úspěšném nebo neúspěšném testu, máme tyto funkce posluchače, které nám umožňují Udělej to
JUnit používá třídu Listener a TestNG používá rozhraní Listener. TestNG zapíše třídu posluchače definující metody rozhraní Listener a druhým krokem je volání tohoto názvu třídy Listener pomocí anotace @Listeners v hlavní třídě.
JUnit také dědí metody z nadřazené třídy Listener, po které je definována třída Runner Listener pro použití funkcí posluchače na jednu nebo více hlavních tříd.
Posluchač v TestNG
Existuje rozhraní ITestListener, ze kterého je TestNG implementováno.
Níže jsou uvedeny metody, které je třeba definovat při implementaci ITestListener -
- OnTestStart ()
- OnTestFailure ()
- OnTestSuccess ()
- OnTestSkipped ()
- OnStart ()
- OnFinish ()
Níže je úryvek kódu demonstrující onTestStart () a onTestSuccess ()
import org.testng.ITestListener; import org.testng.ITestResult; public class TestListener implements ITestListener { @Override public void onTestStart(ITestResult result) { System.out.println('Execution started: '+result.getName()); } @Override public void onTestSuccess(ITestResult result) { System.out.println('Test Passed '+result.getName()); }
Zavolejte tuto třídu posluchače ve své hlavní třídě, jak je znázorněno níže, pomocí anotace @Listener:
import org.testng.annotations.Listeners; import org.testng.annotations.Test; @Listeners(com.javatpoint.Listener.class) public class MymainClass { @Test public void sum() {
Posluchač v JUnit 5
RunListener je třída, kterou je třeba rozšířit o vaši třídu posluchače, aby bylo možné definovat funkce Listener.
Pro JUnit máme následující metody:
- testRunStarted
- testRunFinished
- testFailure
- tesIgnorováno
import org.junit.runner.notification.Failure; import org.junit.runner.notification.RunListener; public class Mylistenerclass extends RunListener { public void testRunStarted(Description desc) throws java.lang.Exception { System.out.println('Execution started' + desc.getMethodName()); } public void testRunFinished(Description desc) throws java.lang.Exception { System.out.println('Execution finished' + desc.getMethodName()); }
K vyvolání výše uvedené třídy posluchače musí být vytvořena třída spuštění posluchače.
Třídu posluchače Mylistener můžete použít na více tříd pomocí testovacích metod.
public class ListenerRunner { public static void main(String() args) { JUnitCore runme = new JUnitCore(); runme.addListener(new ListenerRunner()); runner.run(FirstClass.class, SecondClass.class); }
Závěr
V tomto kurzu JUnit Vs TestNG jsme porovnali rámce TestNG a JUnit. Naučili jsme se společné funkce podporované v obou rámcích i další funkce podporované pouze v TestNG. Zdá se, že existuje několik dalších funkcí pouze v TestNG, jako je paralelní provádění a testy závislostí. Většina funkcí podporovaných TestNG je k dispozici také v JUnit.
Existují malé odchylky, pokud jde o syntaxi, terminologie v JUnit vs TestNG pro společné funkce. Ti, kdo podkopali sílu JUnit nad TestNG, by si to dosud uvědomili, tj. JUnit je také jedním z výkonných automatizačních rámců.
Vrátíme se s mnoha dalšími zajímavými aspekty JUnit. Držte se nadcházejících návodů !!!
Doporučené čtení
- Výukový program JUnit pro začátečníky - Co je testování JUnit
- Seznam anotací JUnit: JUnit 4 Vs JUnit 5
- Jak používat anotaci JUnit 5 @RepeatedTest s příklady
- Testovací případ JUnit Ignore: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- Instalace TestNG, základní program a zprávy
- TestNG anotace a posluchače
- Výukový program TestNG: Úvod do TestNG Framework
- Tvrzení v selenu pomocí rámců Junit a TestNG