TestNG vs JUnit – Unterschied zwischen ihnen
Hauptunterschied zwischen TestNG und JUnit
- TestNG ist eine Java-basiertes Framework, während JUnit ist ein Open-Source-Unit-Testing-Framework für JAVA.
- Vergleich TestNG Vs JUnit, TestNG Anmerkungen sind einfacher zu verwenden und zu verstehen als JUnit.
- TestNG ermöglicht es uns, parallele Tests zu erstellen JUnit unterstützt nicht die Ausführung paralleler Tests.
- In TestNG, Testfälle können in Gruppen zusammengefasst werden JUnit, Eine Gruppierung von Tests ist nicht möglich.

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 soll machen End-to-End-Tests einfach.
Die richtigen TestNGkö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 Java Entwickler können wiederholbare Tests schreiben und ausführen. Erich Gamma und Kent Beck haben es ursprünglich entwickelt. Es ist eine Instanz der xUnit-Architektur. Wie der Name schon sagt, wird es verwendet für Unit Tests eines kleinen Codeblocks.
Entwickler, die einer testgesteuerten Methode folgen, müssen vor dem Coden zunächst Unit-Tests schreiben und ausführen.
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
Beide TestNG und JUnit4 sieht bis auf ein oder zwei Merkmale ä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:
Anmerkungen
Beide JUnit und TestNG verwendet Anmerkungen und fast alle Anmerkungen sehen ähnlich aus.
TestNG verwendet @BeforeMethod ,@AfterMethod ähnlich wie @Before ,@After in JUnit4.
Beide TestNG und Junit4 verwendet @Test(timeout = 1000) für das Timeout. Weitere Einzelheiten finden Sie in der folgenden Tabelle.
SNA | Beschreibung | TestNG | JUnit 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 mit beiden erstellt werden TestNG und JUnit4. Suiten sind jedoch leistungsfähiger TestNG da es eine sehr unterschiedliche Methode zur Durchführung von Tests verwendet. Lassen Sie es uns anhand des folgenden Codeausschnitts verstehen:
Die richtigen JUnit4
Der folgende Kurs beschreibt die Verwendung der Suite beim Arbeiten 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 }
Die richtigen TestNG
TestNG verwendet XML, um alle Tests an einem Ort zu bündeln. Nachfolgend wird die Verwendung der Suite während der Arbeit mit XML beschrieben 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:
Die richtigen 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"); }
Die richtigen 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 verfügbar TestNG und JUnit4. Es wird verwendet, um zu überprüfen, welche Ausnahme vom Test ausgelöst wird.
Die richtigen JUnit4
Der folgende Codeausschnitt beschreibt die Verwendung des Ausnahmetests während der Arbeit mit JUnit4:
@Test(expected = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
Die richtigen TestNG
Der folgende Codeausschnitt beschreibt die Verwendung des Ausnahmetests während der Arbeit mit TestNG:
@Test(expectedExceptions = ArithmeticException.class) public void divideByZero() { Int i = 1/0; }
Timeout
Diese Funktion ist sowohl in TestNg implementiert als auch JUnit4.Timeout wird verwendet, um einen Test zu beenden, der länger als die angegebene Zeit (in Millisekunden) dauert.
Die richtigen JUnit4
Der folgende Codeausschnitt beschreibt die Verwendung des Timeout-Tests während der Arbeit mit JUnit4:
@Test(timeout = 1000) public void method1() { while (true); }
Die richtigen TestNG
Der folgende Codeausschnitt beschreibt die Verwendung des Timeout-Tests während 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 bezeichnet wird. Beide TestNG und JUnit unterstützt parametrisierte Tests, unterscheidet sich jedoch in der Art und Weise, wie sie den Parameterwert definieren. Sehen wir uns das einzeln an.
Die richtigen 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); } }
Die richtigen TestNG
In TestNG, XML-Datei oder „@DataProvider“ wird 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 bereitgestellt TestNG's XML-Konfigurationsdateien. 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 gesehen, JUnit4 und TestNG Vergleich im Detail. Wir haben auch gesehen, dass beide bis auf den parametrisierten Test und den Abhängigkeitstest ähnlich sind. Kurz gesagt können wir sagen, dass wir je nach Flexibilität und Anforderung einen von beiden für den Unit-Test auswählen können.