TestNG vs JUnit: Vad är skillnaden?

Innehållsförteckning:

Anonim

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 samling  data (){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.