Frage

Bei der Arbeit verwenden wir derzeit noch JUnit 3, um unsere Tests durchzuführen.Wir haben überlegt, auf JUnit 4 umzusteigen neu Tests werden gerade geschrieben, aber ich behalte TestNG schon seit einiger Zeit im Auge.Welche Erfahrungen haben Sie alle mit JUnit 4 oder TestNG gemacht und welches scheint bei sehr vielen Tests besser zu funktionieren?Flexibilität beim Schreiben von Tests ist uns ebenfalls wichtig, da unsere Funktionstests einen breiten Aspekt abdecken und auf unterschiedliche Weise geschrieben werden müssen, um Ergebnisse zu erzielen.

Alte Tests werden nicht neu geschrieben, da sie ihre Aufgabe einwandfrei erfüllen.Was ich mir jedoch bei neuen Tests wünschen würde, ist Flexibilität in der Art und Weise, wie der Test geschrieben werden kann, natürliche Behauptungen, Gruppierung und einfach verteilte Testausführungen.

War es hilfreich?

Lösung

Ich habe beide verwendet, aber ich muss Justin Standard zustimmen, dass Sie nicht wirklich darüber nachdenken sollten, Ihre vorhandenen Tests in ein neues Format umzuschreiben.Unabhängig von der Entscheidung ist es ziemlich trivial, beides auszuführen.TestNG ist bestrebt, viel konfigurierbarer zu sein als JUnit, aber am Ende funktionieren beide gleich gut.

TestNG verfügt über eine nette Funktion, mit der Sie Tests als eine bestimmte Gruppe markieren und dann ganz einfach alle Tests einer bestimmten Gruppe ausführen oder Tests einer bestimmten Gruppe ausschließen können.So können Sie Tests, die langsam laufen, als „langsam“ markieren und sie dann ignorieren, wenn Sie schnelle Ergebnisse wünschen.Ein Vorschlag aus ihrer Dokumentation besteht darin, einige Teilmengen als „Eincheck“-Tests zu markieren, die jedes Mal ausgeführt werden sollten, wenn Sie neue Dateien einchecken.Ich habe in JUnit noch nie eine solche Funktion gesehen, aber wenn man sie nicht hat, vermisst man sie auch nicht WIRKLICH.

Trotz aller Behauptungen über eine hohe Konfiguration bin ich vor ein paar Wochen auf einen Eckfall gestoßen, in dem ich nicht das tun konnte, was ich tun wollte ...Ich wünschte, ich könnte mich daran erinnern, was es ist, aber ich wollte es ansprechen, damit Sie wissen, dass es nicht perfekt ist.

Der größte Vorteil von TestNG sind Anmerkungen ...was JUnit sowieso in Version 4 hinzugefügt hat.

Andere Tipps

Zunächst würde ich sagen: Schreiben Sie nicht alle Ihre Tests um, nur um sie an die neueste Modeerscheinung anzupassen.Junit3 funktioniert einwandfrei und die Einführung von Anmerkungen in 4 bringt Ihnen (meiner Meinung nach) nicht viel.Es ist viel wichtiger, dass ihr Jungs seid schreiben Tests, und es hört sich so an, als ob Sie es tun.

Verwenden Sie das, was Ihnen am natürlichsten erscheint und Ihnen bei der Erledigung Ihrer Arbeit hilft.

Ich kann TestNG nicht kommentieren, da ich es nicht verwendet habe.Aber ich würde es empfehlen Einheiten, ein großartiger Wrapper für JUnit/TestNG/DBUnit/EasyMock, unabhängig davon, welchen Weg Sie einschlagen.(Es unterstützt alle oben genannten Geschmacksrichtungen)

Vor etwa einem Jahr hatten wir das gleiche Problem.Ich habe einige Zeit darüber nachgedacht, welcher Schritt besser ist, und schließlich haben wir festgestellt, dass TestNG keine „Killerfunktionen“ hat.Es ist schön und hat einige Funktionen, die JUnit 4 nicht hat, aber wir brauchen sie nicht.
Wir wollten nicht, dass sich die Leute unwohl fühlen, wenn sie Tests schreiben, während sie TestNG kennenlernen, denn wir wollten, dass sie weiterhin viele Tests schreiben.
Außerdem ist JUnit so ziemlich der De-facto-Standard in der Java-Welt.Es gibt kein anständiges Tool, das es nicht von Haus aus unterstützt. Sie können im Internet jede Menge Hilfe finden und im letzten Jahr wurden viele neue Funktionen hinzugefügt, was zeigt, dass es lebendig ist.

Wir haben uns entschieden, bei JUnit zu bleiben und haben es nie bereut.

Zu den größten Pluspunkten von TestNG gehören für mich die Unterstützung von Testgruppen und, was noch wichtiger ist, die Testgruppenabhängigkeiten (das Markieren eines Tests als von einer Gruppe abhängig führt dazu, dass die Tests einfach übersprungen werden, wenn die abhängige Gruppe fehlschlägt).

Zu den weiteren großen Pluspunkten von TestNG gehören für mich Testparameter, Datenanbieter, Anmerkungstransformatoren und vor allem die lebendige und reaktionsfähige Benutzergemeinschaft.

Während man oberflächlich betrachtet vielleicht nicht denkt, dass alle oben genannten Funktionen von TestNG nicht benötigt werden, werden Sie sich fragen, wie Sie mit JUnit zurechtgekommen sind, sobald Sie die Flexibilität Ihrer Tests verstanden haben.

(Haftungsausschluss: Ich habe JUnit 4.x überhaupt nicht verwendet und kann daher keine wirklichen Kommentare zu Fortschritten oder neuen Funktionen abgeben.)

Ein Hoch auf alle oben genannten.Einige andere Dinge, die mir persönlich an TestNG besser gefallen, sind:

  1. Der @BeforeClass for TestNG erfolgt nach der Klassenerstellung, sodass Sie nicht darauf beschränkt sind, darin nur statische Methoden Ihrer Klasse aufrufen zu können.

  2. Parallele und parametrisierte Tests, vielleicht habe ich einfach nicht genug vom Leben ...Aber es macht mir einfach Spaß, einen Satz Selenium-Tests zu schreiben und dabei einen Treibernamen als Parameter zu akzeptieren.Dann definieren Sie drei parallele Testgruppen, jeweils eine für die IE-, FF- und Chrome-Treiber, und beobachten das Rennen!Ich habe ursprünglich 4 gemacht, aber viel zu viele der Seiten, an denen ich gearbeitet habe, machen das kaputt HtmlUnit Fahrer aus dem einen oder anderen Grund.

Ja, wahrscheinlich muss ich dieses Leben finden.;)

Ich wollte das teilen, auf das ich heute gestoßen bin.Ich fand, dass der integrierte parametrisierte Runner in Junit4 im Vergleich zu TestNG ziemlich grob ist (ich weiß, dass jedes Framework seine Stärken hat, aber trotzdem).Die Junit4-Annotation @parameters ist auf einen Parametersatz beschränkt.Ich bin auf dieses Problem gestoßen, als ich das gültige und ungültige Verhalten für die Funktionalität in derselben Testklasse getestet habe.Daher wird die erste öffentliche, statisch annotierte Methode verwendet, die sie findet, sie kann sie jedoch in beliebiger Reihenfolge finden.Dies führt dazu, dass wir unnötigerweise verschiedene Klassen schreiben.TestNG bietet jedoch eine saubere Möglichkeit, unterschiedliche Arten von Datenanbietern für jede einzelne Methode bereitzustellen.So können wir dieselbe Codeeinheit auf gültige und ungültige Weise in derselben Testklasse testen und dabei die gültigen/ungültigen Daten getrennt eingeben.Ich werde mit TestNG gehen.

Ein weiterer Vorteil von TestNG ist die Unterstützung paralleler Tests.In unserem Zeitalter der Multicores ist das meiner Meinung nach wichtig.

Ich habe auch beide Frameworks verwendet.Aber ich benutze Hamcrest für Behauptungen.Mit Hamcrest können Sie ganz einfach Ihre eigene Assert-Methode schreiben.Also statt

assertEquals(operation.getStatus(), Operation.Status.Active);

Du kannst schreiben

assertThat(operation, isActive());

Dadurch haben Sie die Möglichkeit, in Ihren Tests eine höhere Abstraktionsebene zu verwenden.Und das macht Ihre Tests robuster.

Ein paar Ergänzungen zur Antwort von Mike Stone:

1) Am häufigsten verwende ich die Gruppen von TestNG, wenn ich eine einzelne Testmethode in einer Testsuite ausführen möchte.Ich füge diesen Test einfach zur Gruppe „phil“ hinzu und führe dann diese Gruppe aus.Als ich JUnit 3 verwendete, habe ich die Einträge für alle Methoden außer der, die ich in der „Suite“-Methode ausführen wollte, auskommentiert, dann aber häufig vergessen, sie vor dem Einchecken auszukommentieren.Mit den Gruppen habe ich dieses Problem nicht mehr.

2) Abhängig von der Komplexität der Tests kann die Migration von Tests von JUnit3 zu TestNG einigermaßen automatisch mit sed und der Erstellung einer Basisklasse als Ersatz für TestCase erfolgen, die alle TestNG-Assertion-Methoden statisch importiert.

Ich habe Informationen zu meiner Migration von JUnit zu TestNG Hier Und Hier.

JUnit 4 vs. TestNG – Vergleich von mkyong.com (aktualisiert im Jahr 2013).

Abschluss:Ich schlage vor, TestNG als Kern-Unit-Test-Framework für Java-Projekte zu verwenden, da TestNG dies ist mehr Fortschritte bei Parametrisierungstests, Abhängigkeitstests und Suite-Tests (Gruppierungskonzept).

TestNG ist für funktionale Tests auf hoher Ebene und komplexe Integrationstests gedacht.Seine Flexibilität ist besonders bei großen Testsuiten nützlich.

Zusätzlich, TestNG deckt auch die gesamte Kernfunktionalität von JUnit4 ab.Es ist einfach kein Grund mehr für mich, JUnit zu verwenden.

In simple terms, TestNG = JUnit + lot more...So, Why debate ? go and grab TestNG :-)

Einen detaillierteren Vergleich finden Sie hier Hier.

Mir gefällt die übersichtliche und einfache Integration von TestNG mit Guice.

Ihre Frage scheint mir zweideutig zu sein.Einerseits möchten Sie zwei Test-Frameworks vergleichen, andererseits möchten Sie Tests einfach implementieren, natürliche Aussagen haben usw.

Okay, erstens hat JUnit mit TestNG Schritt gehalten, was die Funktionalität angeht. Sie haben die Lücke mit Version 4 einigermaßen geschlossen, aber meiner Meinung nach nicht gut genug.Dinge wie Anmerkungen und Datenanbieter sind in TestNG immer noch viel besser.Außerdem sind sie hinsichtlich der Testausführung flexibler, da TestNG über Testabhängigkeiten, Gruppierungen und Reihenfolgen verfügt.

JUnit erfordert immer noch, dass bestimmte Vorher/Nachher-Methoden statisch sind, was die Möglichkeiten vor der Ausführung von Tests einschränkt. Bei TestNG tritt dieses Problem nie auf.

Ehrlich gesagt, meistens bedeuten die Unterschiede zwischen den beiden Frameworks nicht viel, es sei denn, Sie konzentrieren sich auf Integrations-/Automatisierungstests.Meiner Erfahrung nach ist JUnit von Grund auf für Unit-Tests konzipiert und wird jetzt in Richtung höherer Teststufen vorangetrieben, was es meiner Meinung nach zum falschen Werkzeug für den Job macht.TestNG schneidet bei Unit-Tests gut ab und funktioniert aufgrund seiner robusten Datenbereitstellung und hervorragenden Testausführungsfähigkeiten sogar noch besser auf der Ebene von Integrations-/Automatisierungstests.

Nun zu einem meiner Meinung nach separaten Thema: Wie schreibt man gut strukturierte, lesbare und wartbare Tests?Ich bin mir sicher, dass Sie das meiste davon wissen, aber Dinge wie Fabrikmuster, Befehlsmuster Und Seitenobjekte (wenn Ihre Testwebsites) von entscheidender Bedeutung sind, ist es sehr wichtig, eine Abstraktionsebene zwischen dem, was Sie testen (SUT) und dem, was der eigentliche Test ist (Behauptungen der Geschäftslogik), zu haben.Um viel schönere Behauptungen zu haben, können Sie verwenden Hamcrest.Nutzen Sie die Java-Vererbung/-Schnittstellen, um Wiederholungen zu reduzieren und Gemeinsamkeiten zu erzwingen.

Fast vergessen, benutze auch das Testen Sie das Data Builder-Muster, Dies ist in Verbindung mit der Datenprovider-Annotation von TestNG sehr nützlich.

Meine Meinung dazu, was TestNG wirklich weitaus leistungsfähiger macht:

1.  JUnit still requires the before/after class methods to be static, which limits
    what you can do prior to the running of tests, TestNG never has this issue.

2.  TestNG @Configuration methods can all take an optional argument to their 
    annotated methods in the form of a ITestResult, XmlTest, Method, or 
    ITestContext.  This allows you to pass things around that JUnit wouldn't 
    provide you.  JUnit only does this in listeners and it is limited in use.

3.  TestNG comes with some pre-made report generation classes that you can copy
     and edit and make into your own beautiful test output with very little 
     effort. Just copy the report class into your project and add a listener 
     to run it.  Also, ReportNG is available.

4.  TestNG has a handful of nice listeners that you can hook onto so you can do
     additional AOP style magic at certain phases during testing.

Warum verwenden wir TestNG anstelle von JUnit?

  1. Die Erklärung von @BeforeClass Und @AfterClass Die Methode muss in JUnit statisch sein, wohingegen TestNG in der Methodendeklaration flexibler ist und diese Einschränkungen nicht hat.

  2. In TestNG können wir Tests auf zwei Arten parametrisieren.@Parameter- oder @DataProvider-Annotation.

    ich) @Parameter für einfache Fälle, in denen eine Schlüsselwertzuordnung erforderlich ist. (Daten werden über eine XML-Datei bereitgestellt)

    ii) @Datenanbieter für komplexe Fälle.Mithilfe eines zweidimensionalen Arrays können Daten bereitgestellt werden.

  3. Da die @DataProvider-Methode in TestNG nicht statisch sein muss, können wir mehrere Datenanbietermethoden in derselben Testklasse verwenden.

  4. Abhängigkeitstests: Wenn in TestNG der erste Test fehlschlägt, werden alle nachfolgenden abhängigen Tests übersprungen und nicht als fehlgeschlagen markiert.Aber JUnit hat festgestellt, dass es fehlgeschlagen ist.

  5. Gruppierung: Einzelne Tests können zu mehreren Gruppen gehören und dann in unterschiedlichen Kontexten ausgeführt werden (z. B. langsame oder schnelle Tests).Eine ähnliche Funktion gibt es in JUnit-Kategorien, es fehlen jedoch die TestNG-Annotationen @BeforeGroups/@AfterGroups, die das Initialisieren/Abbrechen des Tests ermöglichen.

  6. Parallelität: Wenn Sie denselben Test parallel in mehreren Threads ausführen möchten, bietet Ihnen TestNG eine einfach zu verwendende Annotation, während JUnit keine einfache Möglichkeit bietet, dies sofort durchzuführen.

  7. TestNG @DataProvider kann auch XML zum Einspeisen von Daten, CSVs oder sogar einfachen Textdateien unterstützen.

  8. Mit TestNG können Sie Abhängigkeiten zwischen Tests deklarieren und diese überspringen, wenn der Abhängigkeitstest nicht bestanden wurde.

@Test(dependsOnMethods = { "dependOnSomething" })

Diese Funktionalität ist in JUnit nicht vorhanden

  1. Berichterstattung:

TestNG-Berichte werden standardmäßig in einem Testausgabeordner generiert, der HTML-Berichte mit allen Testdaten enthält, bestanden/nicht bestanden/übersprungen, wie lange sie ausgeführt wurden, welche Eingaben verwendet wurden und die vollständigen Testprotokolle.Darüber hinaus exportiert es alles in eine XML-Datei, mit der Sie Ihre eigene Berichtsvorlage erstellen können.

Auf der JUnit-Seite sind alle diese Daten auch über XML verfügbar, es gibt jedoch keinen sofort einsatzbereiten Bericht und Sie müssen sich auf Plugins verlassen.

Ressourcenlink:

  1. Ein schneller Vergleich zwischen JUnit und TestNG
  2. JUnit vs.TestNG:Welches Test-Framework sollten Sie wählen?

Ein guter Unterschied wird in diesem Tutorial nebeneinander dargestellt: TestNG vs. JUnit:Was ist der Unterschied?

beide sind fast gleich.TestNG verfügt über einige zusätzliche Funktionen wie Testanzüge und Abhängigkeiten.Den vollständigen Vergleich finden Sie im beigefügten Screenshot. Vollständiger Vergleich zwischen Juni5 und TestNG

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top