Atât Testng cât și Junit sunt cadrul de testare utilizat pentru testarea unitară. TestNG este similar cu JUnit. Mai sunt adăugate câteva funcționalități care fac TestNG mai puternic decât JUnit.
Acest tutorial este concentrat în principal pentru a analiza caracteristicile JUnit și TestNG. Ajută dezvoltatorii să decidă care cadru ar trebui utilizat pentru testarea unitară. Să analizăm mai întâi asemănările dintre TestNG și JUnit4.
TestNG este un cadru de testare inspirat de JUnit și NUnit.
Iată tabelul care prezintă caracteristicile acceptate de JUnit și TestNG.
Compararea caracteristicilor JUnit4 și TestNG
Atât TestNG, cât și JUnit4 arată similar, cu excepția uneia sau a două caracteristici. Să facem o comparație între cele două pentru a decide rapid, ce tehnologie este mai favorabilă testării unitare. Mai jos, tabelul evidențiază caracteristicile acceptate de ambele:
Adnotări
Atât JUnit, cât și TestNG folosesc adnotări și aproape toate adnotările arată similar.
TestNG folosește @BeforeMethod, @ AfterMethod similar cu @Before, @ After în JUnit4.
Atât TestNG, cât și Junit4 utilizează @Test (timeout = 1000) pentru timeout. Verificați tabelul de mai jos pentru mai multe detalii-
SN | Descriere | TestNG | JUnitatea 4 |
---|---|---|---|
1 | Adnotarea testului | @Test | @Test |
2 | Se execută înainte ca prima metodă de testare să fie invocată în clasa curentă | @Înainte de curs | @Înainte de curs |
3 | Execută după toate metodele de testare din clasa curentă | @După clasa | @După clasa |
4 | Se execută înainte de fiecare metodă de testare | @BeforeMethod | @Inainte de |
5 | Se execută după fiecare metodă de testare | @AfterMethod | @După |
6 | adnotare pentru a ignora un test | @Test (enable = false) | @ignora |
7 | adnotare pentru excepție | @Test (expectedExceptions = ArithmeticException.class) | @Test (asteptat = ArithmeticException.class) |
8 | pauză | @Test (timeout = 1000) | @Test (timeout = 1000) |
9 | Se execută înainte de toate testele din suită | @BeforeSuite | n / A |
10 | Se execută după toate testele din suită | @AfterSuite | n / A |
11 | Se execută înainte de executarea unui test | @BeforeTest | n / A |
12 | Se execută după executarea unui test | @AfterTest | n / A |
13 | Se execută înainte de a fi invocată prima metodă de testare care aparține oricăruia dintre aceste grupuri | @BeforeGroups | n / A |
14 | rulați după ultima metodă de testare care aparține oricăruia dintre grupurile de aici | @AfterGroups | n / A |
Test de suită
Suitele sunt utilizate pentru a executa mai multe teste împreună. Suitele pot fi create folosind atât TestNG, cât și JUnit4. Cu toate acestea, suitele sunt mai puternice în TestNG, deoarece folosește o metodă foarte diferită pentru executarea testelor. Să-l înțelegem folosind fragmentul de cod așa cum este prezentat mai jos:
Folosind JUnit4
Clasa de mai jos descrie utilizarea suitei în timp ce lucrați cu JUnit4:
pachet guru99.junit;import org.junit.runner.RunWith;import org.junit.runners.Suite;@RunWith (Suite.class)@ Suite.SuiteClasses ({SuiteTest1.class,SuiteTest2.class,})public class JunitTest {// Această clasă rămâne goală, este utilizată doar ca titular pentru adnotările de mai sus}
Folosind TestNG
TestNG folosește xml pentru a grupa toate testele într-un singur loc. Mai jos xml descrie utilizarea suitei în timp ce lucrați cu TestNG:
Ignorați testul
Folosind ambele putem sări peste un test. Să-l vedem folosind un exemplu de cod, așa cum este prezentat mai jos:
Folosind JUnit4
Mai jos fragmentul de cod descrie utilizarea adnotării @ignore în timp ce lucrați cu JUnit4:
@Ignorapublic void method1 (){System.out.println ("Folosind @Ignore, această execuție este ignorată");}
Folosind TestNG
Mai jos fragmentul de cod descrie utilizarea adnotării @Test (activate = false) în timp ce lucrați cu TestNG:
@Test (activat = fals)public void TestWithException (){System.out.println („Metoda ar trebui ignorată deoarece nu este încă pregătită”);}
Test de excepție
Testarea excepțiilor este disponibilă atât în TestNG, cât și în JUnit4. Se folosește pentru a verifica, care excepție este aruncată din test?
Folosind JUnit4
Mai jos fragmentul de cod descrie utilizarea testului de excepție în timp ce lucrați cu JUnit4:
@Test (asteptat = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}
Folosind TestNG
Mai jos fragmentul de cod descrie utilizarea testului de excepție în timp ce lucrați cu TestNG:
@Test (expectedExceptions = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}
Pauză
Această caracteristică este implementată atât în TestNg, cât și în JUnit4.Timeout este utilizat pentru a termina un test care durează mai mult decât timpul specificat (în milisecunde).
Folosind JUnit4
Mai jos fragmentul de cod descrie utilizarea testului de expirare în timp ce lucrați cu JUnit4:
@Test (timeout = 1000)public void method1 (){while (adevărat);}
Folosind TestNG
Mai jos fragmentul de cod descrie utilizarea testului de expirare în timp ce lucrați cu TestNG:
@Test (timeOut = 1000)public void method1 (){while (adevărat);}
Test parametrizat
JUnit oferă o abordare mai ușoară și mai ușor de citit a testului, cunoscută sub numele de test parametrizat. Atât TestNG, cât și JUnit acceptă testul parametrizat, dar diferă în modul în care definesc valoarea parametrului. Să-l vedem pe rând.
Folosind JUnit4
Adnotările „@RunWith” și „@Parameter” sunt utilizate pentru a furniza valoarea parametrilor pentru testul unitar. Adnotarea @Parameters trebuie să returneze Lista []. Acest parametru va fi transmis în constructorul clasei ca argument.
@RunWith (valoare = Parameterized.class)public class JunitTest {număr privat;public JunitTest6 (număr int){this.number = număr;}@Parametripublic static Collection
Folosind TestNG
În TestNG, fișierul XML sau „@DataProvider” este utilizat pentru a furniza un parametru pentru testare.
Aici adnotarea @Parameters declarată în metodă are nevoie de un parametru pentru testare. Datele utilizate ca parametru vor fi furnizate în fișierele de configurare XML ale TestNG. Procedând astfel, putem reutiliza un singur caz de testare cu seturi de date diferite și putem obține rezultate diferite.
public class Test1 {@Test@ Parametri (valoare = "număr")public void parameterTest (număr int){System.out.println ("Numărul parametrizat este: + număr);}}
Vedeți mai jos fișierul xml pentru a fi utilizat pentru clasa de mai sus:
Rezumat :
Am văzut comparația JUnit4 și TestNG în detalii. De asemenea, am văzut că ambele sunt similare, cu excepția testului parametrizat și a testului de dependență. Pe scurt, putem spune că, pe baza flexibilității și a cerințelor, putem alege oricare dintre ele pentru testarea unitară.
- Următorul