junit vs testng what are differences
Celovita primerjava med ogrodji JUnit Vs TestNG. Vključuje primerjavo opomb in primerjavo funkcij s primeri:
V prejšnji vadnici smo se naučili označevanja DisplayName in pogojnega izvajanja testa na podlagi različnih meril, kot so različica JRE, okoljske spremenljivke itd. Obravnavali smo tudi nekaj pomembnih vprašanj v zvezi s temo.
Ker smo se v prejšnjih vajah nenehno učili o JUnit-u, bo ta deloval kot oddih za naše občinstvo, saj bomo nekaj časa usmerili pozornost iz JUnit-a kot edinega dnevnega reda v primerjavo med JUnit-om in TestNG-jem.
=> Tukaj si oglejte Perfect JUnit Training Guide.
Kaj se boste naučili:
- JUnit Vs TestNG: Primerjava
- Zaključek
JUnit Vs TestNG: Primerjava
Lastnosti | JUnit | TestNG |
---|---|---|
Časovna omejitev za teste | Da | Da |
Okvir odprtega vira | Da JUnit je okvir odprtega vira | Da TestNG je odprtokodni okvir |
Uporabniku prijazno | JUnit je razdeljen med različne module, na primer: ? Za parametrizacijo boste morda potrebovali JUnit Jupiter. ? Zaradi tega je JUnit nekoliko okoren za uporabo v primerjavi s TestNG | Vse funkcije TestNG so na voljo v enem modulu. Zaradi tega je TestNG uporabniku prijaznejši. |
Glavna podpora IDE ( Primer: Eclipse, IntelliJ) | Da Oba podpirata večino IDE enako | Da Oba podpirata večino IDE enako |
Izvajanje pripisov | Da JUnit deluje na opombe z majhnimi različicami za različne funkcije | Da TestNG deluje na opombah z majhnimi različicami za različne funkcije |
Izvajanje trditev | Da JUnit ponuja dovolj trditev za potrditev pričakovanih in dejanskih rezultatov z nekaterimi različicami trditev v TestNG | Da TestNG podpira tudi ogromen seznam trditev za primerjavo pričakovanih in dejanskih rezultatov. Poleg tega TestNG ponuja dva mehanizma za trditve - Soft Assertion in Hard Assertion |
Izjeme | Da JUnit ponuja funkcijo za izjemen test z rahlo različico TestNG | Da TestNG ponuja tudi funkcijo za preskus izjem |
Parametrizirani preskusi | Da JUnit podpira parametrizirane teste | Da TestNG podpira tudi parametrizirane teste |
Test Suite | Da JUnit podpira uporabo testnih paketov | Da TestNG podpira tudi Test Suite. |
Preskus odvisnosti | Ne JUnit ne podpira funkcije za preskus odvisnosti | Da To je napredna funkcija v programu TestNG over JUnit. S to funkcijo lahko določimo, da je ena metoda odvisna od druge, tako da se bo metoda izvajala šele, ko bo odvisna metoda zagnana in bo prešla, sicer se odvisni test ne bo zagnal. |
Vzporedno izvajanje preizkusa | Ne Vzporedna izvedba ni na voljo v JUnit | Da TestNG podpira vzporedno izvajanje testov, JUnit pa ne. Obstaja TestNG xml, kjer se lahko nastavi vzporedno izvajanje |
Maven integracija | Da Obe orodji podpirata integracijo Maven | Da Obe orodji podpirata integracijo Maven |
Izvajanje predpostavk | Da Predpostavke se uporabljajo za preskakovanje testov, ki temeljijo na določenih predpostavkah ali pogojih in to velja samo za JUnit. | Ne TestNG ne podpira predpostavk |
Vrstni red izvedbe testa | Da Junit podpira vrstni red izvedbe testa. | Da TestNG podpira vrstni red izvedbe testa |
Izvajanje poslušalcev | Da JUnit poslušalcev ne podpira preko pripisov, temveč prek API-ja za poslušalce. | Da TestNG podpira poslušalce prek pripisov. |
Prezri preskuse | Da Oba podpirata onemogočanje testov, vendar JUnit podpira onemogočanje testov za izvajanje na podlagi različnih pogojev | Da Oba podpirata onemogočanje testov |
Poročanje | Da JUnit mora biti integriran z maven za ustvarjanje poročil HTML | Da TestNG ima vgrajena poročila HTML. Lahko se integrira s knjižnicami maven in zunanjimi knjižnicami poročanja, kot so poročila ATU ali poročila Extent |
Primerjava opomb
Oba TestNG in JUnit sta okvira za enotno testiranje iz sveta Jave. Oba izvajata zelo bližje in podobne funkcije. V tem razdelku si bomo ogledali nekaj podobnosti pri izvajanju nekaj funkcij, hkrati pa bi videli tudi nekaj drugih funkcij, ki so različno implementirane v JUnit in TestNG.
# 1) Pripis preskusne metode
Ni razlike v načinu, kako določimo metodo kot preskusno metodo tako v JUnit kot v TestNG.
JUNIT 5 | TestNG |
---|---|
@Test | @Test |
# 2) Pripis, povezan s suito
- Metoda z opombo @BeforeSuite se izvede enkrat, preden se zažene trenutni testni paket.
- Ta pripis velja samo za TestNG.
JUNIT 5 | TestNG |
---|---|
Se ne uporablja | @BeforeSuite |
# 3) Pripis metode pred razredom
To je pripis metode, ki se izvede enkrat pred zagonom prve preskusne metode v razredu.
JUNIT 5 | TestNG |
---|---|
@BeforeAll | @BeforeClass |
# 4) Pripis metode pred preskusom
- Ta pripis se izvede enkrat pred metodami, razglašenimi znotraj oznake testng.xml.
- Ta pripis je na voljo samo za TestNG.
JUNIT 5 | TestNG |
---|---|
Se ne uporablja | @BeforeTest |
# 5) Pripis metode, ki se izvede pred vsako metodo s priklicem @Test
JUNIT 5 | TestNG |
---|---|
@BeforeEach | @BeforeMethod |
# 6) Pripis metode, ki se izvede po vsaki metodi s pozivi @Test
JUNIT 5 | TestNG |
---|---|
@AfterEach | @AfterMethod |
# 7) Pripis metode po preskusu
- Ta pripis se izvede enkrat po metodah, razglašenih znotraj oznake testng.xml.
- Ta pripis je na voljo samo za TestNG.
JUNIT 5 | TestNG |
---|---|
Se ne uporablja | @AfterTest |
# 8) Pripis metode po razredu
To je pripis metode, ki se izvede enkrat po zagonu zadnje preskusne metode v razredu.
JUNIT 5 | TestNG |
---|---|
@Konec koncev | @Po pouku |
# 9) Opomba, da onemogočite izvajanje preskusne metode.
- JUnit 5 ponuja pripis, s katerim onemogoči določeno izvajanje preizkusa.
- TestNG ponuja atribut za @Test, tj. 'Omogočeno' z logično vrednostjo, ki odloča, ali bo izvajanje metode onemogočeno ali omogočeno
JUNIT 5 | TestNG |
---|---|
@ignore | @Test (omogočeno = napačno) |
Nanašati se na Vadnica 7 Preskakovanje izvedbe razumeti, kako onemogočiti teste v JUnit4 v primerjavi z JUnit 5
# 10) Pripis časovne omejitve
Pripis je enak za JUnit 5 in TestNG
JUNIT 5 | TestNG |
---|---|
@Test (timeout = 2000) | @Test (timeout = 2000) |
# 11) Atribut pričakovane izjeme
- Razred izjeme navaja, da se med izvajanjem testa vrne izjema danega razreda.
- To je podprto v JUnit in TestNG s spremembo načina deklaracije.
JUNIT 5 | TestNG | |
---|---|---|
@Test (pričakovano = NullPointerException.class) | @Test (pričakovanoException = NullPointerException.class) |
# 12) Pripis, povezan s suito
- Metoda z opombo @AfterSuite se izvede enkrat po zagonu trenutnega preskusnega paketa.
- Ta pripis velja samo za TestNG.
JUNIT 5 | TestNG |
---|---|
Se ne uporablja | @AfterSuite |
# 13) Pripis v zvezi s skupino
- Pripis je na voljo samo v programu TestNG.
- Metoda z opombo @BeforeGroups se zažene, preden se zaženejo testne metode, ki pripadajo določeni skupini.
JUNIT 5 | TestNG | |
---|---|---|
Se ne uporablja | @BeforeGroups |
- Pripis je na voljo samo v programu TestNG.
- Metoda z pripisom @BeforeGroups se zažene po zagonu preskusnih metod, ki pripadajo določeni skupini.
JUNIT 5 | TestNG |
---|---|
Se ne uporablja | @AfterGroups |
# 14) Opombe, povezane z vrstnim redom izvršitve
Tako JUnit kot TestNG podpirata izrecno določanje vrstnega reda preskusov za izvedbo. Z drugimi besedami, določitev prednosti za testne primere.
- JUnit 5 ima kot vhodni parameter za opombo pripis @TestMethodOrder () z vgrajenim razredom paketa MethodOrderer - Alphanumeric.class ali OrderAnnotation.class ali Random.class.
Nanašati se na Vadnica 9 - Nalog za izvršitev preizkusa Junit za več podrobnosti o nastavitvi vrstnega reda za izvajanje preizkusov v JUnit.
- TestNG vključuje atribut ‘prioritet’ za pripis @Test, ki sprejema številčno vrednost.
JUNIT 5 | TestNG |
---|---|
@TestMethodOrder (alfanumerični.class) | @Test (prioriteta = 1) |
Osnovni program za TestNG in JUnit 4
# 1) TestNG koda
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'); } }
Pričakovani izhod:
# 2) Koda 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'); } }
Pričakovani izhod:
JUnit 5 vs TestNG: Razlika med značilnostmi in primeri
# 1) Test Suite
- Testna zbirka je zbirka testov, kar pomeni, da nekako zajemamo več testnih primerov iz več razredov.
- Pristop, ki ga TestNG uporablja, je drugačen in zmogljiv v primerjavi s pristopom JUnit.
Testni paket v JUnit 5
Poglejmo na hitro, kako JUnit 5 uporablja testni paket.
Nanašati se na Vadnica 8 -Junit Test Suites & Filtriranje Testni primeri za boljše razumevanje izvajanja testnega paketa v JUnit 4 in JUnit 5.
@RunWith(JUnitPlatform.class) @SelectClasses({JUnit5TestCase1.class, JUnit5TestCase2.class }) public class JUnitTestSuite { }
Testni paket v programu TestNG
TestNG uporablja XML kot spodnjo predlogo za zajem vseh logično povezanih razredov preizkusa
# 2) Parametrizirani test
Tako TestNG kot JUnit omogočata parametrizacijo testov, kar ni nič drugega kot izvajanje istih testov z različicami podatkov.
Parametrizirani 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); } }
Parametrizirani test v TestNG
Obstajata dva načina, kako lahko uporabite parametrizacijo v TestNG
- @Parameters in prehod skozi TestNG XML
- Pripis @DataProvider
a) @Parameters in prehod skozi 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 za isto
b) DataProvider
Pripis DataProvider vedno vrne Object () (), ki je niz objektov.
@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) Časovna omejitev
Če se določen test ne konča v predpisanem času, dobi časovno omejitev. V drugem primeru se nit prekine.
kako odpreti datoteko json v oknih
Časovna omejitev v JUnit
Obstajajo različni pristopi k izvajanju časovne omejitve v JUnit. To so:
- Uporaba običajne časovne omejitve z določenimi milisekundami
- Uporaba časovne omejitve s trditvijo
- Uporaba globalne časovne omejitve
Imeli bomo podrobno vadnico s poudarkom na časovni omejitvi za JUnit 4 in JUnit 5.
Spodaj je delček, ki prikazuje uporabo običajne časovne omejitve v JUnit 5:
@Test(timeout = 5000) public void testTimeout() throws InterruptedException { while (true) { } }
Zgornja preskusna časovna omejitev po 5 sekundah.
Časovna omejitev v TestNG
TestNG uporablja tudi preprost način izvajanja časovne omejitve:
@Test(timeout = 5000) public void testTimeout() throws InterruptedException { while (true) { } }
# 4) Preskus izjem
Preskus izjem zagotavlja, da je v primeru, da je vržena ta vnaprej določena izjema, ta elegantno ujet in prijavljen v dnevnikih.
Preskus izjem v JUnit 4
@Test (expected = NumberFormatException.class) public void converttoint() { Int j=Integer.parseInt(“Four”); }
Na voljo bo ločena vadnica, ki bo podrobno zajemala izjeme za JUnit 4 in 5.
Preskus izjem v TestNG
Nekaj sprememb v preizkusu izjave o izjemi v TestNG:
@Test (expectedExceptions = NumberFormatException.class) public void converttoint() { Int j=Integer.parseInt(“Four”); }
# 5) Onemogoči test
Tako TestNG kot JUnit omogočata onemogočanje testa za izvajanje.
Onemogočen test v JUnit 5
Oznaka @Disabled pri uporabi na vrhu razreda preskoči vse preizkuse v razredu. Pripis, ki se uporablja nad določeno metodo @Test, je ta poseben testni primer onemogočen za izvajanje.
import org.junit.AfterClass; @Disabled('the testcase is under development') public class JUnitProgram {
Onemogočen test v TestNG
TestNG omogoča, da test onemogoči izvajanje preizkusa, če je atribut »omogočen« pripisa @Test nastavljen na false in je omogočen, ko je atribut nastavljen na true. Če je treba omogočiti vse teste v razredu, potem za vsako metodo @Test izrecno označite omogočeno = true.
Spodaj je delček kode, ki prikazuje preskakovanje testa.
@Test(enabled=false) public void f_validate(){ // let us skip this function}
# 6) Skupinski testi
Na več spletnih mestih in forumih je bilo nasprotujočih si trditev, kjer so ljudje omenili, da JUnit ni nikoli podpiral združevanja testov z določenim imenom skupine.
Pripombe @BeforeGroups in @AfterGroups prihajajo samo s testNG, vendar je združevanje dovoljeno tako v JUnit 4 kot v JUnit 5. Tu bomo hitro pokazali uporabo skupinskih testov v JUnit 5. Skupinski testi se imenujejo Kategorije v JUnit 4 in Oznake v JUNITU 5.
Lahko se sklicujete na Vadnica 8 - JUnit Test Suites in filtrirni testi za podrobnosti o uporabi v JUnit.
Skupinski testi v JUnit 5
@Tag(“Regression”) @Test public void junitMethod1(){} @Tag(“SmokeTest”) @Test public void junitMethod2(){
Delček kode iz JUnit5TestSuite.java:
Spodnja koda vključuje skupino z imenom 'Regresija' in izključuje skupino 'SmokeTest', ki predvideva, da bo junitMethod1 () zagnana, vendar je junitMethod2 () izključena.
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeTags(“Regression”) @ExcludeTags(“SmokeTest”) public class JUnit5TestSuite { }
Skupinski testi v TestNG
Če je zgornji delček treba razlagati v TestNG, je spodaj koda za isto:
@Test(groups={“Regression” }) public void junitMethod1(){} @Test(groups={“SmokeTest” }) public void junitMethod2(){}
TestNG XML je naslednji:
Tu so metode regresijske skupine vključene v tekač, medtem ko so ostale skupine, vključno z SmokeTest, izključene.
# 7) Vzporedni testi
To je funkcija, ki je na voljo samo z TestNG. Običajno so testni primeri neke vrste niti, ki se prikličejo ena za drugo. Če pa želite prihraniti pri času izvajanja, lahko to nadzorujete v TestNG tako, da nastavite vzporedno izvajanje preskusov in navedete število niti, ki jih je treba zagnati hkrati.
Na kratko bomo prikazali uporabo odvisnih metod tukaj in ne bomo razpravljali o odvisnih skupinah.
Odvisni test od druge metode se nastavi prek TestNG XML, kot sledi:
# 8) Odvisni testi
Odvisni testi so napredne funkcije, ki so na voljo samo s programom TestNG. Odvisnosti so lahko na testu ali na skupini.
@Test mytest1(){ System.out.println(“My test : mytest1”); } @Test (dependensOnMethods={“mytest1”}) public void mytest2(){ System.out.println(“My test : mytest2”); }
Ker je v zgornjem programu mytest2 odvisen od mytest1, najprej zažene mytest1 in nato mytest2. Če mytest1 ne uspe, potem mytest2 ne bo poklican. Tako je mogoče vnaprej določiti odvisne testne primere za nadzor določenega poteka dela, ki ga želite izvesti.
# 9) Poslušalci
Poslušalci poslušajo vsak dogodek, ki se zgodi med testi. Poslušalci so podprti tako v JUnit kot TestNG. Torej, če želite izvesti določena opravila ali prikazati določeno sporočilo v dnevniku pred začetkom preizkusa, po končanem preizkusu, ko preskus preskočite, ko je preizkus opravljen ali ni uspel, imamo te funkcije poslušalca, ki nam omogočajo, da To storite
JUnit uporablja razred poslušalca, TestNG pa vmesnik poslušalca. TestNG napiše razred poslušalca, ki definira metode vmesnika poslušalca, drugi korak pa je poklic tega imena razreda poslušalca s pripisom @Listeners v glavnem razredu.
JUnit podeduje tudi metode iz nadrejenega razreda poslušalca, po katerem je definiran razred tekača poslušalca za uporabo funkcij poslušalca v enem ali več glavnih razredih.
Poslušalec v TestNG
Obstaja vmesnik ITestListener, iz katerega se izvaja TestNG.
Spodaj so navedene metode, ki jih je treba opredeliti, ko se izvaja ITestListener -
- OnTestStart ()
- OnTestFailure ()
- OnTestSuccess ()
- OnTestSkipped ()
- OnStart ()
- OnFinish ()
Spodaj je delček kode, ki prikazuje onTestStart () in 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()); }
Pokličite ta razred poslušalca v svojem glavnem razredu, kot je prikazano spodaj, s pripisom @Listener:
import org.testng.annotations.Listeners; import org.testng.annotations.Test; @Listeners(com.javatpoint.Listener.class) public class MymainClass { @Test public void sum() {
Poslušalec v JUnit 5
RunListener je razred, ki ga mora vaš razred poslušalca razširiti, da lahko definira funkcije poslušalca.
Za JUnit imamo naslednje metode:
- testRunStarted
- testRunFinished
- testNeuspeh
- tesIgnored
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()); }
Za priklic zgornjega razreda poslušalca mora biti ustvarjen izvedbeni razred poslušalca.
Razred poslušalca Mylistener lahko uporabite za več razredov s preskusnimi metodami.
public class ListenerRunner { public static void main(String() args) { JUnitCore runme = new JUnitCore(); runme.addListener(new ListenerRunner()); runner.run(FirstClass.class, SecondClass.class); }
Zaključek
V tej vadnici JUnit Vs TestNG smo primerjali ogrodja TestNG in JUnit. Spoznali smo skupne funkcije, podprte v obeh okvirih, pa tudi dodatne funkcije, ki jih podpira samo TestNG. Očitno je le nekaj dodatnih funkcij v programu TestNG, na primer vzporedna izvedba in testi odvisnosti. Večina funkcij, ki jih podpira TestNG, je na voljo tudi v JUnit.
V zvezi s sintakso, terminologijami v JUnit-u in TestNG-jem pri skupnih lastnostih obstajajo majhna odstopanja Tisti, ki so oslabili moč JUnit-a nad TestNG, bi se zavedali do zdaj, tj. JUnit je tudi eden najmočnejših avtomatiziranih okvirov.
Vrnili se bomo s številnimi zanimivimi vidiki JUnit-a. Držite se prihajajočih vadnic !!!
kako inicializirati statično spremenljivko v
Priporočeno branje
- Vadnica JUnit za začetnike - kaj je testiranje JUnit
- Seznam pripisov JUnit: JUnit 4 Vs JUnit 5
- Kako uporabljati pripis JUnit 5 @RepeatedTest z primeri
- JUnit Ignore Test Case: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- Namestitev TestNG, osnovni program in poročila
- Pripisi in poslušalci TestNG
- Vadnica za TestNG: Uvod v ogrodje TestNG
- Trditve v selenu z uporabo okvirov Junit in TestNG