2010-11-23 17 views
14

Je suis familier avec jUnit, et entendu TestNG pourrait être une solution à certaines des ennuis de jUnit - par exemple. son insistance à créer une instance distincte de la classe de test par test, me forçant ainsi à utiliser un champ statique pour les objets que je veux réutiliser entre les tests.Inconvénients de TestNG par rapport à jUnit?

(Disons que vous êtes d'accord avec moi que c'est un inconvénient, et ne pas tourner cette question à quelque chose qu'il n'est pas)

Ce que je vous demande ici, est ce que les inconvénients ne TestNG ont, par rapport à jUnit? Pourquoi ne pas utiliser TestNG, en supposant qu'il s'agit d'un nouveau projet et qu'il n'y a aucun coût de migration?

+0

Vous savez que la réutilisation des objets entre les tests augmente le couplage entre les tests?Les tests couplés sont le fléau absolu du bon test unitaire car ils permettent aux problèmes d'un test d'entraîner des échecs (ou des exceptions) dans un autre ... –

+0

@Donal - ne posons pas cette question à ce sujet. Lors de l'écriture de tests d'intégration lourds avec beaucoup de composants, ne pas réutiliser est un autre fléau, car il peut rendre les tests de tests prennent des heures. – ripper234

+0

D'accord; C'est un problème secondaire. –

Répondre

5

Personnellement, je n'ai pas rencontré d'inconvénients significatifs par rapport à JUnit. Au début d'un nouveau projet, mon équipe est passée à TestNG et n'avait aucun regret. TestNG est plus puissant et prend en charge une utilisation plus large que les tests unitaires.

Certains outils prennent en charge JUnit mais pas TestNG. Ce sont des outils dont je n'ai pas encore besoin. Par exemple:

  • CodePro Analytix de Google prend en charge generation of JUnit unit tests.
  • L'IDE Eclipse pour le développement RCP prend en charge les configurations d'exécution/débogage pour les «tests de plug-in JUnit».
6

Je suis le créateur de TestNG. Je ne vais pas peser parce que je suis évidemment partial, mais je suis heureux de répondre à toute question que vous pourriez avoir à propos de TestNG.

Andy: merci pour votre commentaire. FYI (vous le savez sans doute déjà mais peut-être pas l'affiche originale), there is a TestNG Eclipse plug-in (que je développe en parallèle à TestNG).

+0

Bonjour :) Agréable de "vous rencontrer", je l'aime que vous pouvez rencontrer des gens sur SO. J'utilise TestNG depuis environ 10 minutes maintenant ... Pourquoi avez-vous choisi de ne pas avoir un attribut @Ignore? Ce que j'aime dans @Ignore, c'est que vous pouvez spécifier la raison ignorer dans l'annotation, et AFAIK vous ne pouvez pas faire cela avec "enabled = false" – ripper234

+3

Dans TestNG, vous marquez un test comme ignoré avec "@Test (enabled = false) ". Cela rend la découverte plus facile pour les débutants (il suffit de taper "@Test (" puis control-space et vous obtenez une liste de tous les attributs disponibles). –

3

Étant un grand partisan de TestNG, je vois encore qu'il est considéré comme le numéro 2 par les auteurs d'outils. De nombreux outils et bibliothèques prennent en charge JUnit depuis le début, mais vous devez attendre qu'ils implémentent également le support de TestNG. Cela pourrait être un inconvénient sérieux si vous prévoyez d'utiliser la dernière technologie de bourdonnement.

Au fil des ans, la situation s'est beaucoup améliorée. Par exemple, cela a été un problème avec Spring, Gradle, ou Maven Surefire mais ce n'est plus un problème car ils supportent tous TestNG maintenant. De plus, tous les IDE traitent les deux cadres de manière égale. Alors, assurez-vous que les autres technologies que vous envisagez d'utiliser jouent bien avec TestNG. C'est rarement un problème, mais il vaut mieux s'en assurer.

1

Pour moi, le plus gros problème est une intégration avec le ressort. Je n'aime pas étendre les classes de testng et écrire du code comme ceci:

@Test 
@ContextConfiguration(locations = { "classpath:spring-test-config.xml" }) 
public class TestSpring extends AbstractTestNGSpringContextTests { 

Parce que d'habitude j'ai ma propre hiérarchie des classes de test. C'était la principale raison pour laquelle j'ai arrêté d'utiliser TestNg.

Je dois convenir que le test paramétré était très attrayant pour moi. Mais ils peuvent être facilement remplacés par le fournisseur de données junit.

https://github.com/TNG/junit-dataprovider/wiki/Getting-started

Questions connexes