Ihre Frage scheint mir zweifach gefaltet zu sein. Zum einen möchten Sie zwei Test-Frameworks vergleichen, zum anderen möchten Sie Tests einfach implementieren, natürliche Behauptungen aufstellen usw.
Ok, erstens hat JUnit TestNG in Bezug auf die Funktionalität aufgeholt, sie haben die Lücke etwas mit v4 geschlossen, aber meiner Meinung nach nicht gut genug. Dinge wie Anmerkungen und Datenanbieter sind in TestNG noch viel besser. Sie sind auch flexibler in Bezug auf die Testausführung, da TestNG Testabhängigkeit, Gruppierung und Reihenfolge aufweist.
JUnit erfordert weiterhin, dass bestimmte Vorher / Nachher-Methoden statisch sind, was die Möglichkeiten vor dem Ausführen von Tests einschränkt. TestNG hat dieses Problem nie.
TBH, meistens bedeuten die Unterschiede zwischen den beiden Frameworks nicht viel, es sei denn, Sie konzentrieren sich auf Integrations- / Automatisierungstests. Aus meiner Erfahrung heraus wurde JUnit von Grund auf für Unit-Tests entwickelt und wird nun in Richtung höherer Testebenen getrieben, was IMO zum falschen Werkzeug für diesen Job macht. TestNG eignet sich gut für Unit-Tests und funktioniert aufgrund seiner robusten Datenbereitstellung und hervorragenden Testausführungsfähigkeiten noch besser auf der Ebene der Integrations- / Automatisierungstests.
Nun, was ich glaube, ist eine separate Frage, wie man gut strukturierte, lesbare und wartbare Tests schreibt. Das meiste davon wissen Sie sicher, aber Dinge wie Factory Pattern , Command Pattern und PageObjects (wenn Ihre Testwebsites wichtig sind) sind sehr wichtig. Es ist sehr wichtig, eine Abstraktionsebene zwischen dem, was Sie testen (SUT) und dem, was der eigentliche Test ist ist (Behauptungen der Geschäftslogik). Um viel schönere Aussagen zu machen, können Sie Hamcrest verwenden . Verwenden Sie Javas Vererbung / Schnittstellen, um Wiederholungen zu reduzieren und Gemeinsamkeiten zu erzwingen.
Fast vergessen, verwenden Sie auch das Test Data Builder-Muster . Dies ist in Verbindung mit der Annotation des Datenanbieters von TestNG sehr nützlich.