Votre question me paraît double. D'une part vous aimeriez comparer deux frameworks de test, d'autre part vous aimeriez implémenter des tests facilement, avoir des assertions naturelles, etc ...
Ok, tout d'abord JUnit a joué un rattrapage avec TestNG en termes de fonctionnalités, ils ont comblé le fossé un peu avec la v4, mais pas assez bien à mon avis. Des choses comme les annotations et les fournisseurs de données sont toujours bien meilleures dans TestNG. De plus, ils sont plus flexibles en termes d'exécution des tests, puisque TestNG a des tests de dépendance, de regroupement et de classement.
JUnit nécessite toujours que certaines méthodes avant / après soient statiques, ce qui limite ce que vous pouvez faire avant l'exécution des tests, TestNG n'a jamais ce problème.
TBH, la plupart du temps les différences entre les deux frameworks ne signifient pas grand-chose, sauf si vous vous concentrez sur les tests d'intégration / d'automatisation. D'après mon expérience, JUnit est entièrement conçu pour les tests unitaires et est maintenant poussé vers des niveaux de test plus élevés, ce que l'OMI en fait le mauvais outil pour le travail. TestNG réussit bien aux tests unitaires et, en raison de sa fourniture de données robuste et de ses grandes capacités d'exécution de tests, fonctionne encore mieux au niveau des tests d'intégration / d'automatisation.
Maintenant, pour ce que je crois être une question distincte, comment écrire des tests bien structurés, lisibles et maintenables. La plupart de ce que je suis sûr que vous le savez, mais des choses comme modèle d' usine , Motif de commande et PageObjects (si vos sites d' essai) sont essentiels, il est très important d'avoir une couche d'abstraction entre ce que votre test (SUT) et ce que le test réel is (assertions de logique métier). Afin d'avoir des affirmations beaucoup plus agréables, vous pouvez utiliser Hamcrest . Utilisez l'héritage / les interfaces javas pour réduire les répétitions et renforcer les points communs.
Presque oublié, utilisez également le modèle de générateur de données de test , ce couplé à l'annotation du fournisseur de données de TestNG est très utile.