TestNG vs JUnit – Skillnaden mellan dem
Nyckelskillnad mellan TestNG och JUnit
- TestNG är en Java-baserat ramverk, medan JUnit är ett enhetstestningsramverk med öppen källkod för JAVA.
- Jämföra TestNG Vs JUnit, TestNG anteckningar är lättare att använda och förstå än JUnit.
- TestNG tillåter oss att skapa parallella tester, medan JUnit stöder inte körning av parallella tester.
- In TestNG, Testfall kan grupperas tillsammans, medan i JUnit, Det är inte möjligt att gruppera tester.

Vad är TestNG?
TestNG är ett ramverk för automationstestning där NG står för "Next Generation". TestNG är inspirerad av JUnit som använder anteckningarna (@). TestNG övervinner nackdelarna med JUnit och är designad för att göra test från slut till slut lätt.
Använda TestNG, kan du skapa en ordentlig rapport och du kan enkelt få reda på hur många testfall som är godkända, underkända och hoppade över. Du kan utföra de misslyckade testfallen separat.
Vad är Junit?
JUnit är en enhet med öppen källkod Testning Ram för JAVA. Det är användbart för Java Utvecklare för att skriva och köra repeterbara tester. Erich Gamma och Kent Beck utvecklade det till en början. Det är en instans av xUnit-arkitektur. Som namnet antyder används det för Enhetstestning av en liten bit kod.
Utvecklare som följer testdriven metodik måste skriva och köra enhetstest först innan någon kod.
När du är klar med koden bör du köra alla tester och den ska klara. Varje gång någon kod läggs till måste du köra om alla testfall och se till att inget är trasigt.
skillnader mellan JUnit och TestNG
Både TestNG och JUnit4 ser likadan 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. Tabellen nedan belyser funktionerna som stöds av båda:
Anteckningar
Både JUnit och TestNG använder anteckningar och nästan alla anteckningar ser likadana ut.
TestNG använder @BeforeMethod ,@AfterMethod liknande @Before ,@After i JUnit4.
Både TestNG och Junit4 använder @Test(timeout = 1000) för timeout. Se tabellen nedan för mer information-
SNA | Description | TestNG | JUnit 4 |
---|---|---|---|
1 | Testanteckning | @Testa | @Testa |
2 | Körs innan den första testmetoden anropas i den aktuella klassen | @Innan lektionen | @Innan lektionen |
3 | Kör efter alla testmetoder i den aktuella klassen | @Efter lektionen | @Efter lektionen |
4 | Utförs före varje testmetod | @BeforeMethod | @Innan |
5 | Utförs efter varje testmetod | @AfterMethod | @Efter |
6 | anteckning för att ignorera ett test | @Test(enable=false) | @ignorera |
7 | anteckning för undantag | @Test(expectedExceptions = ArithmeticException.class) | @Test(expected = ArithmeticException.class) |
8 | timeout | @Test(timeout = 1000) | @Test(timeout = 1000) |
9 | Utförs före alla tester i sviten | @BeforeSuite | n / a |
10 | Utförs efter alla tester i sviten | @AfterSuite | n / a |
11 | Körs innan ett test körs | @BeforeTest | n / a |
12 | Körs efter en testkörning | @AfterTest | n / a |
13 | Körs innan den första testmetoden som tillhör någon av dessa grupper anropas | @BeforeGroups | n / a |
14 | kör efter den sista testmetoden som tillhör någon av grupperna här | @AfterGroups | n / a |
Svittest
Sviter används för att utföra flera tester tillsammans. Sviter kan skapas med båda TestNG och JUnit4. Men sviter är mer kraftfulla i TestNG eftersom den använder väldigt olika metoder för att utföra tester. Låt oss förstå det med hjälp av kodavsnitt enligt nedan:
Använda JUnit4
Klassen nedan beskriver användningen av svit när du arbetar med JUnit4:
package guru99.junit; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ SuiteTest1.class, SuiteTest2.class, }) public class JunitTest { // This class remains empty,it is used only as a holder for the above annotations }
Använda TestNG
TestNG använder xml för att samla alla tester på ett ställe. Nedan beskriver xml användningen av suite när du arbetar med TestNG:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My test suite"> <test name="testing"> <classes> <class name="com.guru99.SuiteTest1" /> <class name="com.guru99.SuiteTest2" /> </classes> </test> </suite>
Ignorera testet
Genom att använda båda kan vi hoppa över ett test. Låt oss se det med hjälp av kodexempel enligt nedan:
Använda JUnit4
Nedan kodavsnitt beskriver användningen av @ignore-kommentaren när du arbetar med JUnit4:
@Ignore public void method1() { System.out.println("Using @Ignore , this execution is ignored"); }
Använda TestNG
Nedan kodavsnitt beskriver användningen av @Test(enabled=false) annotering när du arbetar med TestNG:
@Test(enabled=false) public void TestWithException() { System.out.println("Method should be ignored as it's not ready yet"); }
Undantagstest
Undantagstestning är tillgänglig både i TestNG och JUnit4. Det används för att kontrollera vilket undantag som kastas från testet?
Använda JUnit4
Nedan kodavsnitt beskriver användningen av undantagstest när du arbetar med JUnit4:
@Test(expected = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
Använda TestNG
Nedan kodavsnitt beskriver användningen av undantagstest när du arbetar med TestNG:
@Test(expectedExceptions = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
Timeout
Denna funktion är implementerad 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
Nedan kodavsnitt beskriver användningen av timeout-test medan du arbetar med JUnit4:
@Test(timeout = 1000) public void method1() { while (true); }
Använda TestNG
Nedan kodavsnitt beskriver användningen av timeout-test medan du arbetar med TestNG:
@Test(timeOut = 1000) public void method1() { while (true); }
Parameteriserat test
JUnit ger en enklare och läsbar metod för att testa känd som Parameterized test. Både TestNG och JUnit stöder parametriserat test men skiljer sig i hur de definierar parametervärdet. Låt se detta en efter en.
Använda JUnit4
Anteckningarna "@RunWith" och "@Parameter" används för att tillhandahålla parametervärden för enhetstestet. Anteckningen @Parameters måste returnera List[] .Denna parameter kommer att skickas till klasskonstruktorn som ett argument.
@RunWith(value = Parameterized.class) public class JunitTest{ privateint number; public JunitTest6(int number) { this.number = number; } @Parameters public static Collection<Object[]> data() { Object[][] data = new Object[][] { { 1 }, { 2 }, { 3 }, { 4 } }; returnArrays.asList(data); } @Test public void parameterTest() { System.out.println("Parameterized Number is : " + number); } }
Använda TestNG
In TestNG, XML-fil eller "@DataProvider" används för att tillhandahålla en parameter för testning.
Här behöver @Parameters-anteckningen som deklareras i metoden en parameter för testning. Data som används som parameter kommer att tillhandahålla TestNGs XML-konfigurationsfiler. Genom att göra detta kan vi återanvända en singel Testfall med olika datamängder, och vi kan få olika resultat.
public class Test1 { @Test @Parameters(value="number") public void parameterTest(int number) { System.out.println("Parameterized Number is : " + number); } }
Se nedan xml-fil som ska användas för ovanstående klass:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="My test suite"> <test name="testing"> <parameter name="number" value="2"/> <classes> <class name="com.guru99.Test1" /> </classes> </test> </suite>
Sammanfattning
Vi såg JUnit4 och TestNG jämförelse i detaljer. Vi såg också att båda är likartade förutom parametriserat test och beroendetest. Kortfattat kan vi säga, baserat på flexibilitet och krav kan vi välja vilken som helst av dem för enhetstestning.