Både Testng och Junit är ett testramverk som används för enhetstestning. TestNG liknar JUnit. Få fler funktioner läggs till i det som gör TestNG kraftfullare än JUnit.
Denna handledning fokuserar främst på att analysera funktioner i JUnit och TestNG. Det hjälper utvecklare att bestämma vilket ramverk som ska användas för enhetstestning. Låt oss analysera likheter mellan TestNG och JUnit4 först.
TestNG är ett testramverk inspirerat av JUnit och NUnit.
Här är tabellen som visar funktionerna som stöds av JUnit och TestNG.
JUnit4 och TestNG Funktionsjämförelse
Både TestNG och JUnit4 ser lika ut, förutom en eller två funktioner. Låt oss göra en jämförelse mellan de två för att snabbt avgöra vilken teknik som är mer gynnsam för enhetstestning. Nedanstående tabell visar funktionerna som stöds av båda:
Kommentarer
Både JUnit och TestNG använder anteckningar och nästan alla anteckningar ser lika ut.
TestNG använder @BeforeMethod, @ AfterMethod som @Before, @ After i JUnit4.
Både TestNG och Junit4 använder @Test (timeout = 1000) för timeout. Se tabellen nedan för mer information-
SN | Beskrivning | TestNG | JUnit 4 |
---|---|---|---|
1 | Testanmärkning | @Testa | @Testa |
2 | Körs innan den första testmetoden åberopas i den aktuella klassen | @Innan lektionen | @Innan lektionen |
3 | Körs efter alla testmetoder i den aktuella klassen | @Efter lektionen | @Efter lektionen |
4 | Körs före varje testmetod | @BeforeMethod | @Innan |
5 | Körs efter varje testmetod | @AfterMethod | @Efter |
6 | kommentar för att ignorera ett test | @Test (aktivera = falskt) | @ignorera |
7 | anteckning för undantag | @Test (expectExceptions = ArithmeticException.class) | @Test (förväntat = ArithmeticException.class) |
8 | Paus | @Test (timeout = 1000) | @Test (timeout = 1000) |
9 | Körs före alla tester i sviten | @BeforeSuite | ej tillämpligt |
10 | Körs efter alla tester i sviten | @AfterSuite | ej tillämpligt |
11 | Körs innan ett test körs | @BeforeTest | ej tillämpligt |
12 | Körs efter en testkörning | @AfterTest | ej tillämpligt |
13 | Körs innan den första testmetoden åberopas som tillhör någon av dessa grupper åberopas | @BeforeGroups | ej tillämpligt |
14 | kör efter den sista testmetoden som tillhör någon av grupperna här | @AfterGroups | ej tillämpligt |
Svitstest
Sviter används för att utföra flera tester tillsammans. Sviter kan skapas med både TestNG och JUnit4. Sviterna är dock mer kraftfulla i TestNG eftersom det använder mycket olika metoder för utförande av tester. Låt oss förstå det med kodavsnitt som anges nedan:
Använda JUnit4
Nedan beskrivs användningen av sviten när du arbetar med JUnit4:
paket guru99.junit;importera org.junit.runner.RunWith;importera org.junit.runners.Suite;@RunWith (Suite.class)@ Suite.SuiteClasses ({SuiteTest1.klass,SuiteTest2.class,})offentlig klass JunitTest {// Denna klass förblir tom, den används endast som innehavare för ovanstående kommentarer}
Använda TestNG
TestNG använder xml för att samla alla tester på ett ställe. Nedan beskrivs xml-användning av sviten när du arbetar med TestNG:
Ignorera testet
Med båda kan vi hoppa över ett test. Låt oss se det med hjälp av kodexemplet enligt nedan:
Använda JUnit4
Nedan kodavsnittet beskriver användningen av @ignore-anteckningen när du arbetar med JUnit4:
@Ignoreraoffentlig ogiltig metod1 (){System.out.println ("Med @Ignore ignoreras denna körning");}
Använda TestNG
Nedanstående kodavsnitt beskriver användningen av @Test (aktiverad = falsk) kommentar när du arbetar med TestNG:
@Test (aktiverat = falskt)offentligt ogiltigt TestWithException (){System.out.println ("Metoden bör ignoreras eftersom den inte är klar ännu");}
Undantagstest
Undantagstestning finns både i TestNG och JUnit4. Den används för att kontrollera vilket undantag som kastas från testet?
Använda JUnit4
Nedan beskrivs kodavsnittet för användning av undantagstest när du arbetar med JUnit4:
@Test (förväntat = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}
Använda TestNG
Nedan kodavsnittet beskriver användningen av undantagstest när du arbetar med TestNG:
@Test (expectExceptions = ArithmeticException.class)public void divideByZero (){Int i = 1/0;}
Paus
Denna funktion implementeras både i TestNg och JUnit4.Timeout används för att avsluta ett test som tar längre tid än angiven tid (i millisekunder).
Använda JUnit4
Nedanstående kodavsnitt beskriver användningen av timeout-testet när du arbetar med JUnit4:
@Test (timeout = 1000)offentlig ogiltig metod1 (){medan (sant);}
Använda TestNG
Nedanstående kodavsnitt beskriver användningen av timeout-test när du arbetar med TestNG:
@Test (timeOut = 1000)offentlig ogiltig metod1 (){medan (sant);}
Parameteriserat test
JUnit ger ett enklare och läsbart tillvägagångssätt för test som kallas Parameterized test. Både TestNG och JUnit stöder parametrerat test men skiljer sig åt i hur de definierar parametervärdet. Låt oss se detta en efter en.
Använda JUnit4
Anmärkningarna "@RunWith" och "@Parameter" används för att tillhandahålla parametervärde för enhetstestet. Annotationen @Parameters måste returnera Lista []. Denna parameter kommer att skickas till klasskonstruktören som ett argument.
@RunWith (värde = Parameterized.class)offentlig klass JunitTest {privatint nummer;offentliga JunitTest6 (int nummer){detta.nummer = antal;}@Parametersoffentlig statisk samlingdata (){Objekt [] [] data = nytt objekt [] [] {{1}, {2}, {3}, {4}};returnArrays.asList (data);}@Testapublic void parameterTest (){System.out.println ("Parameteriserat nummer är: + nummer);}}
Använda TestNG
I TestNG används XML-fil eller "@DataProvider" för att tillhandahålla en parameter för testning.
Här behöver @Parameters-annotering deklareras i metoden en parameter för testning. Data som används som parameter kommer att tillhandahållas i TestNGs XML-konfigurationsfiler. Genom att göra detta kan vi återanvända ett enda testfall med olika datamängder, och vi kan få olika resultat.
allmän klass Test1 {@Testa@Parameters (värde = "antal")public void parameterTest (int number){System.out.println ("Parameteriserat nummer är: + nummer);}}
Se nedan xml-fil som ska användas för ovanstående klass:
Sammanfattning:
Vi såg JUnit4 och TestNG jämförelse i detaljer. Vi såg också att båda är lika utom parametrerade test och beroendestest. Kort sagt kan vi säga, baserat på flexibilitet och krav kan vi välja vilken som helst av dem för enhetstestning.
- Nästa