Sowohl Testng als auch Junit sind Testframeworks, die für Unit-Tests verwendet werden. TestNG ähnelt JUnit. Es wurden nur wenige weitere Funktionen hinzugefügt, die TestNG leistungsfähiger als JUnit machen.
Dieses Tutorial konzentriert sich hauptsächlich auf die Analyse der Funktionen von JUnit und TestNG. Es hilft Entwicklern bei der Entscheidung, welches Framework für Unit-Tests verwendet werden soll. Lassen Sie uns zuerst die Ähnlichkeiten zwischen TestNG und JUnit4 analysieren.
TestNG ist ein von JUnit und NUnit inspiriertes Testframework.
In der folgenden Tabelle sind die von JUnit und TestNG unterstützten Funktionen aufgeführt.
Vergleich der Funktionen von JUnit4 und TestNG
Sowohl TestNG als auch JUnit4 sehen bis auf ein oder zwei Funktionen ähnlich aus. Lassen Sie uns einen Vergleich zwischen beiden anstellen, um schnell zu entscheiden, welche Technologie für Unit Testing günstiger ist. In der folgenden Tabelle sind die von beiden unterstützten Funktionen aufgeführt:
Anmerkungen
Sowohl JUnit als auch TestNG verwenden Anmerkungen, und fast alle Anmerkungen sehen ähnlich aus.
TestNG verwendet @BeforeMethod, @ AfterMethod ähnlich wie @Before, @ After in JUnit4.
Sowohl TestNG als auch Junit4 verwenden @Test (Timeout = 1000) für das Timeout. Weitere Informationen finden Sie in der folgenden Tabelle.
SN | 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 | Wird nach allen Testmethoden in der aktuellen Klasse ausgeführt | @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 für Ausnahme | @Test (expectedExceptions = ArithmeticException.class) | @Test (erwartet = ArithmeticException.class) |
8 | Auszeit | @ Test (Zeitüberschreitung = 1000) | @ Test (Zeitüberschreitung = 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 ausgeführt, nachdem ein Test ausgeführt wurde | @ AfterTest | n / A |
13 | Wird ausgeführt, bevor die erste Testmethode aufgerufen wird, die zu einer dieser Gruppen gehört | @BeforeGroups | n / A |
14 | Führen Sie nach der letzten Testmethode aus, die zu einer der Gruppen hier gehört | @ AfterGroups | n / A |
Suite-Test
Suiten werden verwendet, um mehrere Tests zusammen auszuführen. Suiten können sowohl mit TestNG als auch mit JUnit4 erstellt werden. Suites sind in TestNG jedoch leistungsfähiger, da für die Ausführung von Tests sehr unterschiedliche Methoden verwendet werden. Lassen Sie es uns mit dem folgenden Code-Snippet verstehen:
Verwenden von JUnit4
Die folgende Klasse beschreibt die Verwendung der Suite während der Arbeit mit JUnit4:
Paket guru99.junit;import org.junit.runner.RunWith;import org.junit.runners.Suite;@ RunWith (Suite.class)@ Suite.SuiteClasses ({SuiteTest1.class,SuiteTest2.class,})öffentliche Klasse JunitTest {// Diese Klasse bleibt leer und wird nur als Halter für die obigen Anmerkungen verwendet}}
Verwenden von TestNG
TestNG verwendet XML, um alle Tests an einem Ort zu bündeln. Die folgende XML beschreibt die Verwendung der Suite während der Arbeit mit TestNG:
class> test> suite>
Test ignorieren
Mit beiden können wir einen Test überspringen. Sehen wir ihn uns anhand des folgenden Codebeispiels an:
Verwenden von JUnit4
Das folgende Codefragment beschreibt die Verwendung der Annotation @ignore während der Arbeit mit JUnit4:
@Ignorierenpublic void method1 (){System.out.println ("Bei Verwendung von @Ignore wird diese Ausführung ignoriert");}}
Verwenden von TestNG
Das folgende Codefragment beschreibt die Verwendung der Annotation @Test (enabled = false) während der Arbeit mit TestNG:
@Test (aktiviert = falsch)public void TestWithException (){System.out.println ("Methode sollte ignoriert werden, da sie noch nicht fertig ist");}}
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.
Verwenden von JUnit4
Das folgende Codefragment beschreibt die Verwendung des Ausnahmetests während der Arbeit mit JUnit4:
@Test (erwartet = ArithmeticException.class)public void dividierenByZero (){Int i = 1/0;}}
Verwenden von TestNG
Das folgende Codefragment beschreibt die Verwendung des Ausnahmetests während der Arbeit mit TestNG:
@Test (expectedExceptions = ArithmeticException.class)public void dividierenByZero (){Int i = 1/0;}}
Auszeit
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.
Verwenden von JUnit4
Das folgende Codefragment beschreibt die Verwendung des Timeout-Tests während der Arbeit mit JUnit4:
@ Test (Zeitüberschreitung = 1000)public void method1 (){während (wahr);}}
Verwenden von TestNG
Das folgende Code-Snippet beschreibt die Verwendung des Timeout-Tests während der Arbeit mit TestNG:
@Test (timeOut = 1000)public void method1 (){während (wahr);}}
Parametrisierter Test
JUnit bietet einen einfacheren und lesbareren Testansatz, der als parametrisierter Test bezeichnet wird. Sowohl TestNG als auch JUnit unterstützen parametrisierte Tests, unterscheiden sich jedoch in der Art und Weise, wie sie den Parameterwert definieren. Lassen Sie uns dies eins nach dem anderen sehen.
Verwenden von JUnit4
Die Annotationen "@RunWith" und "@Parameter" werden verwendet, um den Parameterwert für den Komponententest bereitzustellen. Die Annotation @Parameters muss List [] zurückgeben. Dieser Parameter wird als Argument an den Klassenkonstruktor übergeben.
@RunWith (Wert = Parameterized.class)öffentliche Klasse JunitTest {privateeint Nummer;public JunitTest6 (int number){this.number = number;}}@ Parameteröffentliche statische Sammlung
Verwenden 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 @ Parameter-Annotation einen Parameter zum Testen. Die als Parameter verwendeten Daten werden in den XML-Konfigurationsdateien von TestNG bereitgestellt. Auf diese Weise können wir einen einzelnen Testfall mit unterschiedlichen Datensätzen wiederverwenden und unterschiedliche Ergebnisse erzielen.
öffentliche Klasse Test1 {@Prüfung@Parameters (Wert = "Nummer")public void parameterTest (int number){System.out.println ("Parametrisierte Nummer ist: + Nummer);}}}}
Siehe unten stehende XML-Datei, die für die obige Klasse verwendet werden soll:
class> test> suite>
Zusammenfassung :
Wir haben den Vergleich von JUnit4 und TestNG im Detail gesehen. Wir haben auch gesehen, dass beide ähnlich sind, mit Ausnahme des parametrisierten Tests und des Abhängigkeitstests. Kurz gesagt, wir können aufgrund der Flexibilität und der Anforderungen sagen, dass wir eine davon für Unit-Tests auswählen können.
- Nächster