JUnit vs TestNG
Au travail nous sommes actuellement toujours en utilisant JUnit 3 pour exécuter nos tests. Nous avons pris en considération le changement de JUnit 4 pour nouveau tests écrits, mais j'ai été en gardant un œil sur TestNG pour un certain temps maintenant. Quelles expériences avez-vous tous eu, soit avec JUnit 4 ou TestNG, et qui semble le mieux fonctionner pour un très grand nombre de tests? Avoir de la souplesse dans l'écriture de tests est également important pour nous, puisque nos tests fonctionnels couvrent un large aspect et doivent être écrites dans une variété de façons d'obtenir des résultats.
Vieux tests ne seront pas ré-écrit comme ils le font leur travail très bien. Ce que j'aimerais voir de nouveaux tests, c'est la flexibilité dans la façon dont le test peut être écrit, naturel affirmations, de regroupement et de facilement de test distribué des exécutions.
- Toute modification de 08 à maintenant????
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé les deux, mais je suis d'accord avec Justin Standard que vous ne devriez pas vraiment envisager de réécrire vos tests existants pour tout nouveau format. Quelle que soit la décision, il est assez trivial à exécuter à la fois. TestNG s'efforce d'être beaucoup plus configurable que JUnit, mais à la fin ils travaillent tous les deux aussi bien.
TestNG a une fonction propre où vous pouvez marquer des essais comme un groupe particulier, et ensuite facilement exécuter tous les tests d'un groupe spécifique, ou d'exclure les tests d'un groupe particulier. Ainsi, vous pouvez marquer des tests qui s'exécutent lentement, comme dans la "lenteur" du groupe, puis de les ignorer quand vous voulez des résultats rapides. Une suggestion de leur documentation est à marquer un certain sous-ensemble comme "checkin" tests qui doit être exécuté à chaque fois que vous vérifiez les nouveaux fichiers dans. Je n'ai jamais vu une telle fonctionnalité dans JUnit, mais encore une fois, si vous ne l'avez pas, vous ne VRAIMENT pas manquer.
Pour l'ensemble de ses revendications de configuration de haut, j'ai fait la course dans un coin le cas il y a quelques semaines où je ne pouvais pas faire ce que je voulais faire... je souhaite que je pourrais rappeler de ce que c'est, mais je voulais le mettre, donc vous savez que ce n'est pas parfait.
Le plus grand avantage TestNG est annotations... qui JUnit ajouté dans la version 4 de toute façon.
Abord, je dirais de ne pas réécrire tous vos tests juste pour répondre à la dernière mode. Junit3 fonctionne parfaitement bien, et l'introduction des annotations dans les 4 ne pas vous acheter beaucoup (à mon avis). Il est beaucoup plus important que vous les gars écrire tests, et il semble que vous ne.
Utiliser ce qui semble le plus naturel et vous aide à faire votre travail.
Je ne peux pas commenter sur TestNG b/c je ne l'ai pas utilisé. Mais je vous recommande unitils, un grand wrapper pour JUnit/TestNG/DBUnit/EasyMock, quelle que soit la route que vous prenez. (Il prend en charge toutes les saveurs mentionné ci-dessus)
Il ya environ un an, nous avons eu le même problème. J'ai passé quelque temps en considérant le mouvement a été mieux, et finalement, nous avons réalisé que TestNG n'a pas de "killer features". C'est agréable, et dispose de quelques fonctionnalités JUnit 4 n'a pas, mais nous n'avons pas besoin d'eux.
Nous ne voulons pas que les gens à se sentir mal à l'aise à écrire des essais tout en apprenant à connaître TestNG parce que nous voulions à continuer à écrire tout un tas de tests.
Aussi, JUnit est à peu près le standard de facto dans le monde Java. Il n'y a aucun outil décent qui ne prennent pas en charge, à partir de la boîte, vous pouvez trouver beaucoup d'aide sur le web et ils ont ajouté beaucoup de nouvelles fonctionnalités dans la dernière année, ce qui montre qu'il est vivant.
Nous avons décidé de coller avec JUnit et n'a jamais regardé en arrière.
TestNG plus gros tirage de cartes pour moi, comprennent son soutien à des groupes d'essai, et plus important encore - test groupe dépendances (marquage d'un test comme étant à la charge d'un groupe entraîne des tests pour simplement ignorer en cours d'exécution lorsque la variable dépendante groupe échoue).
TestNG d'autres grands tirer les cartes pour moi, comprennent les paramètres de test, fournisseurs de données, l'annotation des transformateurs, et plus que tout - la dynamique et réactive de la communauté d'utilisateurs.
Tandis que sur la surface, on peut pas penser à tous TestNGs les fonctions ci-dessus peuvent ne pas être nécessaires, une fois que vous commencez à comprendre la flexibilité apporter à vos tests, vous vous demanderez comment vous avez fait face avec JUnit.
(avertissement - je n'ai pas utilisé JUnit 4.x à tous, je ne peux donc pas vraiment me prononcer sur les avances ou les nouvelles fonctionnalités, y).
Bravo à tous les ci-dessus. Quelques autres choses que j'ai personnellement trouvé que j'aime de plus en TestNG sont:
La
@BeforeClass
pour TestNG a lieu après la classe, de la création, de sorte que vous ne sont pas contraints par seulement être capable d'appeler les méthodes statiques de la classe en elle.Parallèle et paramétrable tests, peut-être que je n'ai pas assez d'une vie... mais je viens d'obtenir un coup de pied la rédaction d'un ensemble de Sélénium tests, l'acceptation d'un nom de pilote en tant que paramètre. Puis de définir 3 test en parallèle des groupes, 1 de chaque pour les IE, FF et Chrome pilotes, et regarder la course! A l'origine, je n'4, mais beaucoup trop de pages, j'ai travaillé sur pause le
HtmlUnit
pilote pour une raison ou une autre.Ouais, probablement à trouver que la vie. 😉
Je voulais parler de celui que j'ai rencontré aujourd'hui. J'ai trouvé intégré Paramétrable coureur est assez rudimentaire dans Junit4 que de les comparer à TestNG (je sais que chaque cadre a ses points forts, mais quand même). Le Junit4 annotation @paramètres est limité à un ensemble de paramètres. J'ai rencontré ce problème lors des tests valides et non valides comportement de la fonctionnalité dans la même classe de test. Ainsi, le premier public, statique méthode annotée qu'il trouve sera utilisé, mais il peut les trouver dans n'importe quel ordre. Ce qui le pousse à écrire des différentes classes inutilement. Cependant TestNG fournit propre façon de fournir différents types de fournisseurs de données pour chaque méthode. On peut donc les tester de la même unité de code valides et invalides façon dans la même classe de test de mettre le valide/non valide les données séparément. Je vais aller avec TestNG.
Également un avantage de plus de TestNG est de soutenir des tests parallèles. Dans notre ère de l'multicores c'est important, je pense.
J'ai aussi utilisé les deux cadres. Mais je l'aide hamcrest pour assertations. Hamcrest vous permet de facilement créer votre propre méthode assert. Ainsi, au lieu de
Vous pouvez écrire
Qui vous donne la possibilité d'utiliser plus haut niveau d'abstraction dans vos tests. Et de ce fait vos tests plus robuste.
JUnit 4 Vs TestNG – Comparaison par mkyong.com ( mise à jour 2013).
Conclusion: je suggère l'utilisation de TestNG comme base unit test framework Java pour le projet, parce TestNG est plus avance de paramétrer les tests, la dépendance des tests et de la suite de tests (Regroupement de concept).
TestNG est conçu pour fonctionnel de haut niveau de test et d'intégration complexe de test. Sa souplesse est particulièrement utile avec de grandes suites de test.
En outre, TestNG également couvrir la totalité de la base JUnit4 fonctionnalité. Il est tout simplement aucune raison pour moi de l'utiliser JUnit plus.
Vous trouverez de plus amples comparaison ici.
Un couple d'ajouts à Mike Pierre de répondre:
1) Les plus fréquentes que j'utilise TestNG groupes de pour est lorsque je veux exécuter une seule méthode de test dans une suite de tests. J'ai simplement ajouter ce test pour le groupe "phil" et ensuite exécuter ce groupe. Quand j'ai été en utilisant JUnit 3, je voudrais commenter les entrées pour toutes les méthodes, mais celle que j'ai envie de courir dans la "suite" de la méthode, mais serait souvent oublié décommenter avant l'embarquement. Avec les groupes, je n'ai plus ce problème.
2) en Fonction de la complexité des tests, la migration des tests de JUnit3 à TestNG peut être fait un peu automatiquement avec sed et de la création d'une classe de base pour remplacer des cas de test statique des importations de tous les TestNG affirmer méthodes.
J'ai une info sur ma migration de JUnit pour TestNG ici et ici.
J'aime le pur et l'intégration facile de TestNG avec Guice.
Votre question semble plié en deux pour me. D'une part vous voulez comparer deux frameworks de test, d'autre part, vous souhaitez mettre en œuvre des tests facilement, naturel affirmations, etc...
Ok, tout d'abord JUnit a été de rattraper leur retard avec TestNG en termes de fonctionnalité, ils ont comblé l'écart certains qu'avec la v4, mais pas assez bien à mon avis. Des choses comme des annotations et des dataproviders sont encore beaucoup mieux dans TestNG. Ils sont aussi plus flexibles en termes d'exécution des tests, depuis TestNG a test de dépendance, de regroupement et de tri.
JUnit nécessite encore certains avant/après des méthodes statiques, ce qui limite ce que vous pouvez faire avant l'exécution de tests, TestNG n'a jamais cette question.
TBH, surtout les différences entre les deux cadres ne signifie pas grand-chose, à moins que votre en se concentrant sur l'intégration de l'automatisation des tests. JUnit à partir de mon expérience est construit à partir du sol en place pour les tests unitaires et est maintenant poussé vers des niveaux plus élevés de test, de l'OMI qui rend le mauvais outil pour le travail. TestNG fait bien les tests unitaires et en raison de sa robuste dataproviding et grand exécution du test de capacités, fonctionne encore mieux à l'intégration de l'automatisation des test de niveau.
Maintenant pour ce que je crois est une question distincte, comment écrire bien structuré, lisible et maintenable tests. La plupart de ce que je suis sûr que vous le savez, mais des choses comme Modèle de Fabrique, Modèle de Commande et PageObjects (si votre test de sites web) sont vitales, il est très important d'avoir une couche d'abstraction entre ce que votre test (SUT) et que le test est (assertions de la logique métier). Afin d'avoir beaucoup plus agréable affirmations, vous pouvez utiliser Hamcrest. Faire usage de javas héritage/interfaces pour réduire le nombre de redoublements et d'appliquer des points communs.
Presque oublié, utilisez également le des Données de Test du Générateur de Modèle, cela couplé avec TestNG du dataprovider annotation est très utile.
Mon avis sur ce qui rend TestNG vraiment beaucoup plus puissant:
Pourquoi nous utilisons TestNG au lieu de JUnit?
La déclaration de
@BeforeClass
et@AfterClass
méthode doit être statique dans JUnit alors qu'il y est plus de flexibilité dans la TestNG dans la déclaration de méthode, il n'a pas ces contraintes.Dans TestNG, nous pouvons paramétrer les tests à l'aide de 2 façons. @Paramètre ou @DataProvider annotation.
i) @Paramètre pour les cas simples, où la valeur de la clé de la cartographie est nécessaire.(les données sont fournies par le biais de fichier xml)
ii) @DataProvider pour les cas complexes. À l'aide de 2 dimensions, tableau, Il peut fournir des données.
Dans TestNG, depuis @DataProvider méthode n'a pas besoin d'être statique, nous pouvons utiliser plusieurs fournisseur de données méthodes de la même classe de test.
Dépendance Test: Dans TestNG, si le test échoue, tous les tests dépendant seront ignorés, pas marqué comme ayant échoué. Mais JUnit marqué qu'il a échoué.
Groupement: un Seul test peut appartenir à plusieurs groupes, puis exécuter dans différents contextes (comme lents ou rapides, les tests). Une fonctionnalité similaire existe dans JUnit Catégories mais manque de @BeforeGroups /@AfterGroups TestNG annotations qui permettent d'initialiser le test de /déchirer vers le bas.
Parallélisme: Si vous souhaitez exécuter le même test en parallèle sur plusieurs threads, TestNG vous a couvert avec un simple pour utiliser l'annotation tandis que JUnit n'offre pas de moyen simple de le faire sortir de la boîte.
TestNG @DataProvider peut également soutenir XML pour l'alimentation en données, ces volumes, ou même des fichiers de texte brut.
TestNG vous permet de déclarer des dépendances entre les tests, et les ignorer, si le test de dépendance n'est pas passé.
Cette fonctionnalité n'existe pas dans JUnit
TestNG les rapports sont générés par défaut pour un test-dossier de sortie qui comprend des rapports HTML avec toutes les données de test, réussi/échoué/sauté, combien de temps ont-ils exécuté, ce qui d'entrée a été utilisé et le test complet de journaux. En outre, il est également tout exporter vers un fichier XML qui peut être utilisé pour construire votre propre modèle de rapport.
Sur la JUnit avant, l'ensemble de ces données est également disponible via XML, mais il n'y a pas à sortir de la zone de rapport et vous avez besoin de s'appuyer sur les plugins.
Ressources Lien:
Une bonne différence est donné dans ce tutoriel, côté par côté: TestNG Vs JUnit: Quelle est la Différence?
les deux sont presque identiques. TestNG a quelques extra featurs comme testsuits et de la dépendance au. veuillez trouver ci-joint screeshot pour obtenir le plein comparaison. plein Juni5 vs TestNG Comparaison