TestNG versus JUnit – Verschil daartussen

Belangrijkste verschil tussen TestNG en JUnit

  • TestNG is een op Java gebaseerd raamwerk, terwijl JUnit een open-source Unit Testing Framework voor JAVA is.
  • Als je TestNG versus JUnit vergelijkt, zijn TestNG-annotaties gemakkelijker te gebruiken en te begrijpen dan JUnit.
  • Met TestNG kunnen we parallelle tests maken, terwijl JUnit het uitvoeren van parallelle tests niet ondersteunt.
  • In TestNG kunnen testgevallen worden gegroepeerd, terwijl in JUnit het groeperen van tests niet mogelijk is.
TestNG versus JUnit
TestNG versus JUnit

Wat is TestNG?

TestNG is een automatiseringstestframework waarin NG staat voor “Next Generation”. TestNG is geïnspireerd door JUnit waarbij gebruik wordt gemaakt van de annotaties (@). TestNG overwint de nadelen van JUnit en is ontworpen om end-to-end testen gemakkelijk.

Met TestNG kunt u een goed rapport genereren en eenvoudig te weten komen hoeveel testgevallen zijn geslaagd, mislukt en overgeslagen. U kunt de mislukte testgevallen afzonderlijk uitvoeren.

Wat is Junit?

JUnit is een open source-eenheid Testen Kader voor JAVA. Het is nuttig voor Java Ontwikkelaars die herhaalbare tests schrijven en uitvoeren. Erich Gamma en Kent Beck ontwikkelen het in eerste instantie. Het is een exemplaar van xUnit-architectuur. Zoals de naam al aangeeft, wordt het gebruikt voor Testen van een eenheid van een klein stukje code.

Ontwikkelaars die following testgestuurde methodologie moet eerst unit-tests schrijven en uitvoeren voordat er code wordt uitgevoerd.

Als u klaar bent met de code, moet u alle tests uitvoeren en moet deze slagen. Elke keer dat er code wordt toegevoegd, moet u alle testgevallen opnieuw uitvoeren en ervoor zorgen dat er niets kapot gaat.

Verschillen tussen JUnit en TestNG

Zowel TestNG als JUnit4 zien er hetzelfde uit, behalve een of twee functies. Laten we een vergelijking tussen de twee maken om snel te beslissen welke technologie gunstiger is voor Unit Testing. Onderstaande tabel belicht de functies die door beide worden ondersteund:

Verschillen tussen JUnit en TestNG

Annotaties

Zowel JUnit als TestNG gebruiken annotaties en bijna alle annotaties lijken op elkaar.

TestNG gebruikt @BeforeMethod ,@AfterMethod vergelijkbaar met @Before ,@After in JUnit4.

Zowel TestNG als Junit4 gebruiken @Test(timeout = 1000) voor time-out. Bekijk de onderstaande tabel voor meer informatietails-

SN Omschrijving TestNG JUn 4
1 Annotatie testen @Toets @Toets
2 Wordt uitgevoerd voordat de eerste testmethode in de huidige klasse wordt aangeroepen @Voor klas @Voor klas
3 Voert na alle testmethoden in de huidige klasse uit @Na de les @Na de les
4 Wordt uitgevoerd vóór elke testmethode @Weerplaza @Voor
5 Wordt uitgevoerd na elke testmethode @AfterMethode @Na
6 annotatie om een ​​test te negeren @Test(inschakelen=onwaar) @negeren
7 annotatie voor uitzondering @Test(expectedExceptions = ArithmeticException.class) @Test(verwacht = ArithmeticException.class)
8 time-out @Test(time-out = 1000) @Test(time-out = 1000)
9 Wordt uitgevoerd vóór alle tests in de suite @BeforeSuite n / a
10 Voert na alle tests in de suite uit @AfterSuite n / a
11 Wordt uitgevoerd voordat een test wordt uitgevoerd @VoorTest n / a
12 Wordt uitgevoerd na een testrun @AfterTest n / a
13 Wordt uitgevoerd voordat de eerste testmethode wordt aangeroepen die tot een van deze groepen behoort @WillemII n / a
14 uitgevoerd na de laatste testmethode die tot een van de groepen hier behoort @AfterGroups n / a

Suite-test

Suites worden gebruikt om meerdere tests samen uit te voeren. Suites kunnen worden gemaakt met zowel TestNG als JUnit4. Suites zijn echter krachtiger in TestNG omdat het een heel andere methode gebruikt voor het uitvoeren van tests. Laten we het begrijpen met behulp van het codefragment zoals hieronder weergegeven:

JUnit4 gebruiken

De onderstaande klasse beschrijft het gebruik van de suite tijdens het werken met 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		
}

TestNG gebruiken

TestNG gebruikt xml om alle tests op één plek te bundelen. Hieronder beschrijft xml het gebruik van de suite tijdens het werken met 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>

Negeer test

Als we beide gebruiken, kunnen we een test overslaan. Laten we het bekijken met een codevoorbeeld zoals hieronder weergegeven:

JUnit4 gebruiken

Het onderstaande codefragment beschrijft het gebruik van de annotatie @ignore tijdens het werken met JUnit4:

@Ignore
public void method1() 
{
	System.out.println("Using @Ignore , this execution is ignored");
}

TestNG gebruiken

Het onderstaande codefragment beschrijft het gebruik van de annotatie @Test(enabled=false) tijdens het werken met TestNG:

@Test(enabled=false)
public void TestWithException()
{  
	System.out.println("Method should be ignored as it's not ready yet");
}

Uitzonderingstest

Uitzonderingstests zijn beschikbaar in TestNG en JUnit4. Het wordt gebruikt om te controleren: welke uitzondering wordt uit de test gegenereerd?

JUnit4 gebruiken

Het onderstaande codefragment beschrijft het gebruik van de uitzonderingstest tijdens het werken met JUnit4:

@Test(expected = ArithmeticException.class)  
public void divideByZero() 
{  
	Int i = 1/0;
}

TestNG gebruiken

Het onderstaande codefragment beschrijft het gebruik van de uitzonderingstest tijdens het werken met TestNG:

@Test(expectedExceptions = ArithmeticException.class)  
public void divideByZero()
{  
Int i = 1/0;
}	

Timeout

Deze functie is zowel in TestNg als in JUnit4 geïmplementeerd. Timeout wordt gebruikt om een ​​test te beëindigen die langer duurt dan de opgegeven tijd (in milliseconden).

JUnit4 gebruiken

Het onderstaande codefragment beschrijft het gebruik van de time-outtest tijdens het werken met JUnit4:

@Test(timeout = 1000)  
public void method1()
{  
	while (true);  
}

TestNG gebruiken

Het onderstaande codefragment beschrijft het gebruik van de time-outtest tijdens het werken met TestNG:

@Test(timeOut = 1000)  
public void method1()
{  
	while (true);  
}

Geparametriseerde test

JUnit biedt een gemakkelijkere en leesbare testbenadering, bekend als geparametriseerde test. Zowel TestNG als JUnit ondersteunen geparametriseerde tests, maar verschillen in de manier waarop ze de parameterwaarde definiëren. Laten we dit één voor één bekijken.

JUnit4 gebruiken

De annotaties “@RunWith” en “@Parameter” worden gebruikt om parameterwaarden voor de eenheidstest op te geven. De annotatie @Parameters moet List[] retourneren. Deze parameter wordt als argument doorgegeven aan de klassenconstructor.

@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);
     }
}

TestNG gebruiken

In TestNG wordt een XML-bestand of “@DataProvider” gebruikt om een ​​testparameter op te geven.

Hier heeft de @Parameters-annotatie die in de methode is gedeclareerd, een parameter nodig om te testen. De gegevens die als parameter worden gebruikt, worden opgenomen in de XML-configuratiebestanden van TestNG. Door dit te doen, kunnen we een enkele hergebruiken Testgeval met verschillende datasets, en we kunnen verschillende resultaten krijgen.

public class Test1 {

    @Test
    @Parameters(value="number")
    public void parameterTest(int number)
	{
    	System.out.println("Parameterized Number is : " + number);
    }
     
}

Zie het onderstaande xml-bestand dat voor bovenstaande klasse moet worden gebruikt:

<!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>

Samengevat

We zagen JUnit4 en TestNG-vergelijking in details. We zagen ook dat beide vergelijkbaar zijn, behalve de geparametriseerde test en de afhankelijkheidstest. Kort gezegd kunnen we zeggen dat we op basis van flexibiliteit en vereisten een van hen kunnen kiezen voor Unit Testing.