TestNG vs. JUnit – Unterschied zwischen ihnen

Hauptunterschied zwischen TestNG und JUnit

  • TestNG ist ein Java-basiertes Framework, während JUnit ein Open-Source-Unit-Testing-Framework für JAVA ist.
  • Beim Vergleich von TestNG und JUnit sind TestNG-Annotationen einfacher zu verwenden und zu verstehen als JUnit.
  • Mit TestNG können wir parallele Tests erstellen, während JUnit die Ausführung paralleler Tests nicht unterstützt.
  • In TestNG können Testfälle gruppiert werden, während in JUnit das Gruppieren von Tests nicht möglich ist.
TestNG vs. JUnit
TestNG vs. JUnit

Was ist TestNG?

TestNG ist ein Automatisierungstest-Framework, bei dem NG für „Next Generation“ steht. TestNG ist inspiriert von JUnit welches die Anmerkungen (@) verwendet. TestNG überwindet die Nachteile von JUnit und ist darauf ausgelegt End-to-End-Tests einfach.

Mit TestNG können Sie einen ordnungsgemäßen Bericht erstellen und leicht herausfinden, wie viele Testfälle bestanden, fehlgeschlagen und übersprungen wurden. Sie können die fehlgeschlagenen Testfälle separat ausführen.

Was ist Junit?

JUnit ist eine Open-Source-Einheit Testen Framework für JAVA. Es ist nützlich für Javac Entwickler können wiederholbare Tests schreiben und ausführen. Erich Gamma und Kent Beck entwickeln es zunächst. Es ist eine Instanz von xUnit archiStruktur. Wie der Name schon sagt, wird es verwendet für Unit Tests eines kleinen Codeblocks.

Entwickler, die folgenwing Bei der testgesteuerten Methodik muss vor jedem Code zuerst ein Komponententest geschrieben und ausgeführt werden.

Sobald Sie mit dem Code fertig sind, sollten Sie alle Tests ausführen und er sollte erfolgreich sein. Jedes Mal, wenn Code hinzugefügt wird, müssen Sie alle Testfälle erneut ausführen und sicherstellen, dass nichts kaputt geht.

Unterschiede zwischen JUnit und TestNG

TestNG und JUnit4 sehen bis auf ein oder zwei Features ähnlich aus. Lassen Sie uns einen Vergleich zwischen beiden anstellen, um schnell zu entscheiden, welche Technologie für Unit Testing günstiger ist. Die folgende Tabelle zeigt die von beiden unterstützten Funktionen:

Unterschiede zwischen JUnit und TestNG

Anmerkungen

Sowohl JUnit als auch TestNG verwenden Annotationen und fast alle Annotationen sehen ähnlich aus.

TestNG verwendet @BeforeMethod ,@AfterMethod ähnlich wie @Before ,@After in JUnit4.

Sowohl TestNG als auch Junit4 verwenden @Test(timeout = 1000) für die Zeitüberschreitung. Weitere Informationen finden Sie in der folgenden Tabelletails-

SNA Beschreibung TestNG Einheit 4
1 Testanmerkung @Prüfung @Prüfung
2 Wird ausgeführt, bevor die erste Testmethode in der aktuellen Klasse aufgerufen wird @Vor dem Unterricht @Vor dem Unterricht
3 Führt nach allen Testmethoden in der aktuellen Klasse aus @Nach dem Unterricht @Nach dem Unterricht
4 Wird vor jeder Testmethode ausgeführt @BeforeMethod @Vor
5 Wird nach jeder Testmethode ausgeführt @ AfterMethod @Nach dem
6 Anmerkung zum Ignorieren eines Tests @Test(enable=false) @ignorieren
7 Anmerkung zur Ausnahme @Test(expectedExceptions = ArithmeticException.class) @Test(expected = ArithmeticException.class)
8 Timeout @Test(timeout = 1000) @Test(timeout = 1000)
9 Wird vor allen Tests in der Suite ausgeführt @BeforeSuite n / a
10 Wird nach allen Tests in der Suite ausgeführt @ AfterSuite n / a
11 Wird ausgeführt, bevor ein Test ausgeführt wird @BeforeTest n / a
12 Wird nach einem Testlauf ausgeführt @ AfterTest n / a
13 Wird ausgeführt, bevor die erste Testmethode aufgerufen wird, die zu einer dieser Gruppen gehört @BeforeGroups n / a
14 wird nach der letzten Testmethode ausgeführt, die zu einer der hier aufgeführten Gruppen gehört @ AfterGroups n / a

Suite-Test

Suiten werden verwendet, um mehrere Tests gemeinsam auszuführen. Suiten können sowohl mit TestNG als auch mit JUnit4 erstellt werden. Allerdings sind Suiten in TestNG leistungsfähiger, da sie ganz andere Methoden zur Testausführung verwenden. Lassen Sie es uns anhand des folgenden Codeausschnitts verstehen:

Verwendung von JUnit4

Die folgende Klasse beschreibt die Verwendung der Suite bei der Arbeit mit 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		
}

Verwendung von TestNG

TestNG verwendet XML, um alle Tests an einem Ort zu bündeln. Nachfolgend beschreibt XML die Verwendung der Suite bei der Arbeit mit 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>

Test ignorieren

Wenn wir beide verwenden, können wir einen Test überspringen. Sehen wir uns das anhand des folgenden Codebeispiels an:

Verwendung von JUnit4

Der folgende Codeausschnitt beschreibt die Verwendung der @ignore-Annotation bei der Arbeit mit JUnit4:

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

Verwendung von TestNG

Der folgende Codeausschnitt beschreibt die Verwendung der Annotation @Test(enabled=false) bei der Arbeit mit TestNG:

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

Ausnahmetest

Ausnahmetests sind sowohl in TestNG als auch in JUnit4 verfügbar. Es wird verwendet, um zu überprüfen, welche Ausnahme vom Test ausgelöst wird.

Verwendung von JUnit4

Der folgende Codeausschnitt beschreibt die Verwendung des Ausnahmetests bei der Arbeit mit JUnit4:

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

Verwendung von TestNG

Der folgende Codeausschnitt beschreibt die Verwendung des Ausnahmetests bei der Arbeit mit TestNG:

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

Timeout

Diese Funktion ist sowohl in TestNg als auch in JUnit4 implementiert. Timeout wird verwendet, um einen Test zu beenden, der länger als die angegebene Zeit (in Millisekunden) dauert.

Verwendung von JUnit4

Der folgende Codeausschnitt beschreibt die Verwendung des Timeout-Tests bei der Arbeit mit JUnit4:

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

Verwendung von TestNG

Der folgende Codeausschnitt beschreibt die Verwendung des Timeout-Tests bei der Arbeit mit TestNG:

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

Parametrisierter Test

JUnit bietet einen einfacheren und lesbareren Testansatz, der als parametrisierter Test bekannt ist. Sowohl TestNG als auch JUnit unterstützen parametrisierte Tests, unterscheiden sich jedoch in der Art und Weise, wie sie den Parameterwert definieren. Sehen wir uns das einzeln an.

Verwendung von JUnit4

Die Annotationen „@RunWith“ und „@Parameter“ werden verwendet, um Parameterwerte für den Komponententest bereitzustellen. Die Annotation @Parameters muss List[] zurückgeben. Dieser Parameter wird als Argument an den Klassenkonstruktor übergeben.

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

Verwendung von TestNG

In TestNG wird eine XML-Datei oder „@DataProvider“ verwendet, um einen Parameter zum Testen bereitzustellen.

Hier benötigt die in der Methode deklarierte @Parameters-Annotation einen Parameter zum Testen. Die als Parameter verwendeten Daten werden in den XML-Konfigurationsdateien von TestNG bereitgestellt. Auf diese Weise können wir eine einzelne wiederverwenden Testfall Mit unterschiedlichen Datensätzen können wir unterschiedliche Ergebnisse erzielen.

public class Test1 {

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

Siehe untenstehende XML-Datei, die für die obige Klasse verwendet werden soll:

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

Zusammenfassung

Wir haben den Vergleich von JUnit4 und TestNG in DE gesehentails. Wir haben auch gesehen, dass beide ähnlich sind, mit Ausnahme des parametrisierten Tests und des Abhängigkeitstests. Kurz gesagt können wir sagen, dass wir je nach Flexibilität und Anforderung jede davon für Unit-Tests auswählen können.