TestNG vs JUnit – Verschil daartussen

Belangrijkste verschil tussen TestNG en JUnit

  • TestNG is een Java-gebaseerd raamwerk, terwijl JUnit is een open source Unit Testing Framework voor JAVA.
  • Vergelijken TestNG Vs JUnit, TestNG annotaties zijn gemakkelijker te gebruiken en te begrijpen dan JUnit.
  • TestNG stelt ons in staat parallelle tests te maken, terwijl JUnit ondersteunt geen parallelle tests.
  • In TestNG, Testgevallen kunnen worden gegroepeerd terwijl ze binnen zijn JUnit, Het groeperen van tests is niet mogelijk.
TestNG vs JUnit
TestNG vs 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 te maken end-to-end testen gemakkelijk.

gebruik 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 om herhaalbare tests te schrijven en uit te voeren. Erich Gamma en Kent Beck ontwikkelden het aanvankelijk. Het is een instantie van xUnit-architectuur. Zoals de naam al aangeeft, wordt het gebruikt voor Testen van een eenheid van een klein stukje code.

Ontwikkelaars die de testgedreven methodologie volgen, moeten eerst unittests schrijven en uitvoeren voordat ze code schrijven.

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

Beiden TestNG en JUnit4 ziet 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

Beiden JUnit en TestNG gebruikt annotaties en bijna alle annotaties lijken op elkaar.

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

Beiden TestNG en Junit4 gebruikt @Test(timeout = 1000) voor time-out. Bekijk de onderstaande tabel voor meer details:

SN Beschrijving TestNG JUnit 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. Met beide kunnen suites worden gemaakt TestNG en 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:

gebruik JUnit4

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		
}

gebruik TestNG

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:

gebruik JUnit4

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

gebruik TestNG

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

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

gebruik JUnit4

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

gebruik TestNG

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.Time-out wordt gebruikt om een ​​test te beëindigen die langer duurt dan de opgegeven tijd (in milliseconden).

gebruik JUnit4

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

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

gebruik TestNG

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 benadering van testen, bekend als geparametriseerde test. Beide TestNG en JUnit ondersteunt geparametriseerde tests, maar verschilt in de manier waarop ze de parameterwaarde definiëren. Laten we dit één voor één bekijken.

gebruik JUnit4

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

gebruik TestNG

In TestNG, XML-bestand of “@DataProvider” wordt 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, zullen voorzien in TestNG's XML-configuratiebestanden. 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>

Samenvatting

Wij zagen JUnit4 en TestNG vergelijking in detail. We zagen ook dat beide vergelijkbaar zijn, behalve geparametriseerde test en afhankelijkheidstest. Kortom, we kunnen zeggen dat we op basis van flexibiliteit en vereisten een van beide kunnen kiezen voor Unit Testing.

Vat dit bericht samen met: