126 votes

JUnit et TestNG

Au travail, nous utilisons encore actuellement JUnit 3 pour exécuter nos tests. Nous avons envisagé de passer à JUnit 4 pour les raisons suivantes nouveau de tests en cours d'écriture, mais je garde un œil sur TestNG depuis un certain temps déjà. Quelles expériences avez-vous eues avec JUnit 4 ou TestNG, et lequel semble le mieux fonctionner pour un très grand nombre de tests ? Avoir de la flexibilité dans l'écriture des tests est également important pour nous car nos tests fonctionnels couvrent un large aspect et doivent être écrits de différentes manières pour obtenir des résultats.

Les anciens tests ne seront pas réécrits car ils remplissent parfaitement leur fonction. Ce que j'aimerais voir dans les nouveaux tests, c'est une plus grande flexibilité dans la façon dont le test peut être écrit, des assertions naturelles, des regroupements et des exécutions de test facilement distribuées.

11 votes

Tout changement de 08 à maintenant ????

0 votes

Il suffit d'utiliser TestNG il a tout ce que Junit a, et bien plus encore !

67voto

Mike Stone Points 21293

J'ai utilisé les deux, mais je suis d'accord avec Justin Standard pour dire que vous ne devriez pas vraiment envisager de réécrire vos tests existants dans un nouveau format. Quelle que soit la décision prise, il est assez trivial d'utiliser les deux. TestNG s'efforce d'être beaucoup plus configurable que JUnit, mais au final, ils fonctionnent tous les deux aussi bien.

TestNG possède une fonctionnalité intéressante qui vous permet de marquer les tests comme un groupe particulier, puis d'exécuter facilement tous les tests d'un groupe spécifique, ou d'exclure les tests d'un groupe particulier. Ainsi, vous pouvez marquer les tests qui s'exécutent lentement comme faisant partie du groupe "lent", puis les ignorer lorsque vous souhaitez obtenir des résultats rapides. Une suggestion de leur documentation est de marquer un certain sous-ensemble comme tests "checkin" qui devraient être exécutés chaque fois que vous enregistrez de nouveaux fichiers. Je n'ai jamais vu une telle fonctionnalité dans JUnit, mais là encore, si vous ne l'avez pas, elle ne vous manque pas vraiment.

Malgré toutes ses prétentions de haute configuration, j'ai rencontré un cas de figure il y a quelques semaines où je n'ai pas pu faire ce que je voulais faire... J'aimerais pouvoir me rappeler ce que c'est, mais je voulais en parler pour que vous sachiez que ce n'est pas parfait.

Le plus grand avantage de TestNG est les annotations... que JUnit a ajouté dans la version 4 de toute façon.

14 votes

JUnit peut faire la chose de regroupement dont vous parlez en définissant une suite de tests et en ajoutant ensuite les tests du groupe souhaité à cette suite. Vous pouvez ensuite configurer une cible dans votre script ant qui n'exécute que cette suite, et configurer votre contrôle de source pour exécuter cette cible lors du checkin.

9 votes

Le plus grand avantage de TestNG par rapport à JUnit est la possibilité de générer dynaniquement des données de test pour les tests paramétrés. Chaque élément de données de test est un "test" différent, ce qui facilite la création de tests orientés données. testng.org/doc/documentation-main.html#paramètres

6 votes

Les tests paramétrés sont faciles à réaliser avec les théories, qui sont intégrées dans les nouvelles versions de Junit (mais sont expérimentales pour le moment).

20voto

Justin Standard Points 15312

Tout d'abord, je dirais qu'il ne faut pas réécrire tous vos tests juste pour répondre à la dernière mode. Junit3 fonctionne parfaitement bien, et l'introduction des annotations dans 4 ne vous apporte pas grand-chose (à mon avis). Il est beaucoup plus important que vous écrire des tests, et on dirait que vous en avez.

Utilisez ce qui vous semble le plus naturel et qui vous aide à accomplir votre travail.

Je ne peux pas faire de commentaires sur TestNG car je ne l'ai pas utilisé. Mais je recommande unitils L'utilisation de JUnit, une excellente enveloppe pour JUnit/TestNG/DBUnit/EasyMock, quelle que soit la voie que vous empruntez. (Il supporte toutes les saveurs mentionnées ci-dessus).

1 votes

Unitils ne semble pas avoir été mis à jour depuis un certain temps ; fonctionnera-t-il avec les nouvelles versions de JUnit/TestNG ?

0 votes

Juste pour ceux qui trouvent cette réponse en 2011, j'ai vérifié, et la dernière version d'unitils (3.2), a une date de sortie de : 2011-09-29. Donc, il est en cours d'entretien.

18voto

abyx Points 15304

Il y a environ un an, nous avons eu le même problème. J'ai passé un certain temps à réfléchir à la meilleure solution, et nous avons finalement réalisé que TestNG n'avait pas de "killer features". C'est bien, et il y a des fonctionnalités que JUnit 4 n'a pas, mais nous n'en avons pas besoin.
Nous ne voulions pas que les gens se sentent mal à l'aise pour écrire des tests pendant qu'ils apprennent à connaître TestNG, car nous voulions qu'ils continuent à écrire beaucoup de tests.
En outre, JUnit est pratiquement la norme de facto dans le monde Java. Il n'y a pas d'outil décent qui ne le prenne pas en charge d'emblée, vous pouvez trouver beaucoup d'aide sur le Web et ils ont ajouté beaucoup de nouvelles fonctionnalités l'année dernière, ce qui montre qu'il est vivant.

Nous avons décidé de nous en tenir à JUnit et n'avons jamais regardé en arrière.

1 votes

À mon avis, la principale caractéristique de TestNG est la possibilité de transmettre des arguments contextuels via les méthodes de configuration Before et After. Vous pouvez faire beaucoup de tours de magie que Junit ne peut pas faire. 95 % des gens ne prennent pas la peine d'apprendre TestNG aussi bien et l'ignorent. De plus, TestNG dispose d'une méthode intéressante de threading via DataProvider, mais seulement si vous en tirez parti. Enfin, testng.xml peut contenir Beanshell.

18voto

Mark Derricutt Points 565

Les principaux atouts de TestNG sont pour moi la prise en charge des groupes de tests et, plus important encore, les dépendances des groupes de tests (le fait de marquer un test comme dépendant d'un groupe permet aux tests de ne pas s'exécuter si le groupe dépendant échoue).

Pour moi, les autres atouts de TestNG sont les paramètres de test, les fournisseurs de données, les transformateurs d'annotation et, surtout, la communauté d'utilisateurs dynamique et réactive.

Si, à première vue, on peut penser que toutes les fonctionnalités de TestNG ci-dessus ne sont pas nécessaires, une fois que vous commencerez à comprendre la flexibilité apportée à vos tests, vous vous demanderez comment vous faisiez avec JUnit.

(avertissement - je n'ai pas du tout utilisé JUnit 4.x, et je ne suis donc pas en mesure de commenter réellement les avancées ou les nouvelles fonctionnalités de cette version).

3 votes

J'utilise à la fois JUnit4 et TestNG, TestNG a un meilleur support pour l'intégration de spring-test. Cela rend les tests d'applications basées sur Spring beaucoup plus faciles.

18voto

mezmo Points 1678

Santé à tout ce qui précède. D'autres choses que j'ai personnellement trouvé que j'aime plus dans TestNG sont :

  1. El @BeforeClass pour TestNG a lieu après la création de la classe, de sorte que vous n'êtes pas limité par le fait de ne pouvoir appeler que des méthodes statiques de votre classe dans celle-ci.

  2. Tests parallèles et paramétrés, peut-être que je n'ai pas assez de vie... mais je prends mon pied à écrire un ensemble de tests Selenium, acceptant un nom de pilote comme paramètre. Puis de définir 3 groupes de tests parallèles, 1 pour chacun des pilotes IE, FF et Chrome, et de regarder la course ! A l'origine, j'en avais fait 4, mais un trop grand nombre de pages sur lesquelles j'ai travaillé ne respectent pas la règle de l'anonymat. HtmlUnit conducteur pour une raison ou une autre.

Oui, je dois probablement trouver cette vie. ;)

0 votes

Enfin un commentaire charnu après tous les hummm ils sont tous les deux égaux et awwhing

0 votes

Oui, TestNG est génial : Je charge les instances du pilote via les args de test à partir du TestNG DataProvider également. Voici comment j'ai procédé : github.com/djangofan/yet-another-selenium-framework/blob/master/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X