NUnit contre xUnit

110

Quelles sont les différences entre NUnit et xUnit.net ? Quel est l'intérêt d'en développer deux, pas un seul?

J'ai lu que xUnit est développé par l'inventeur de NUnit:

xUnit.net est un outil de test unitaire pour .NET Framework. Écrit par l' inventeur original de NUnit

D'autre part:

NUnit est un cadre de test unitaire pour tous les langages .Net. La version de production actuelle, la version 2.6, est la septième version majeure de cet outil de test unitaire basé sur xUnit

Alors, où est la vérité?

Ruslan
la source
3
Comme @Joey l'a souligné, il ne s'agit pas d'un double de la question liée. Dans ce cas, le PO a fondamentalement mal compris quelque chose; à savoir la différence entre xUnit.net - l'outil de test unitaire et x Unit - le terme généralisé pour la classe des frameworks de test unitaire (nUnit, jUnit, etc.). Voter pour rouvrir.
Rob Levine

Réponses:

131

Au moment de la rédaction de cette réponse, la dernière version de NUnit est la v3.5 et xUnit.net est la v2.1.

Les deux frameworks sont géniaux, et ils prennent tous les deux en charge l'exécution de tests parallèles (d'une manière différente cependant). NUnit existe depuis 2002, il est largement utilisé, bien documenté et possède une grande communauté, tandis que xUnit.net est plus moderne, plus adhérent à TDD, plus extensible et aussi tendance dans le développement .NET Core. C'est également bien documenté.

En plus de cela, la principale différence que j'ai remarquée est la façon dont xUnit.net exécute les méthodes de test. Ainsi, dans NUnit , nous avons une classe de test et un ensemble de méthodes de test. NUnit crée une nouvelle instance de la classe de test, puis exécute toutes les méthodes de tests à partir de la même instance. Alors que xUnit.net crée une nouvelle instance de la classe de test pour chacune des méthodes de test. . Par conséquent, on ne peut pas utiliser des champs ou des propriétés pour partager des données entre des méthodes de test, ce qui est une mauvaise pratique, car nos méthodes de test seraient dépendantes les unes des autres, ce qui n'est pas acceptable dans TDD. Donc, si vous utilisez xunit.net, vous pouvez être sûr que vos méthodes de test sont complètement isolées.

Si vous êtes prêt à partager certaines données entre vos méthodes de test, xUnit vous le permettra. Par conséquent, par défaut, toutes les méthodes de test sont complètement isolées, mais vous pouvez rompre intentionnellement cet isolement dans des cas spécifiques. J'aime cette attitude, c'est pourquoi je l'aime mieux.

Akazemis
la source
4
Pour plus de détails, consultez mon dernier message: codopia.wordpress.com/2017/02/20/…
akazemis
2
Ce que vous écrivez sur l'exécution parallèle n'est pas vrai. Peut-être que c'était au moment de votre publication, mais maintenant ce n'est pas le cas. Vérifiez ceci xunit.net/docs/running-tests-in-parallel . Il dit que les méthodes de test dans une classe ne fonctionneront jamais en parallèle.
Gondil
Merci @Gondil, vous avez raison, il n'exécutera pas les méthodes d'une seule classe en parallèle. peaufiné le bit de parallélisme
akazemis
1
Je ne sais pas comment vous avez découvert que xUnit est «bien documenté», ce qui n'est clairement pas le cas. Toutes les informations doivent être trouvées via des sources communautaires et des questions de stackoverflow au lieu d'une bonne documentation comme le fait NUnit. J'étais vraiment enthousiasmé par xUnit après votre réponse, mais j'ai pensé que NUnit semble également bien fonctionner dans .NET Core.
CularBytes
1
@Loaderon J'ai posté cela il y a environ 4 ans et j'utilise xunit depuis lors jusqu'à maintenant. la documentation et la communauté sont bien meilleures qu'avant et elles sont plus matures maintenant. alors utilisez XUnit l'esprit tranquille, vous n'aurez pas besoin de revenir à NUnit. :)
akazemis
33

Vous confondez le nom d'un seul outil ( xUnit.net ) avec le nom de toute une classe de frameworks de tests unitaires ( xUnit , le x faisant référence à un langage / environnement, par exemple JUnit, NUnit, ...).

Joey
la source
1
Dommage que cela se soit fermé, car ce n'est pas un simple doublon - vous avez raison - le PO s'est confondu entre deux termes qui sont presque les mêmes.
Rob Levine
J'ai légèrement changé le titre, pour m'assurer qu'il n'y aura pas de confusion.
Ruslan
1
Je ne suis pas allé par le titre mais plutôt par les segments surlignés des citations dans votre question. Mais peut-être que je vous ai mal compris.
Joey
8

Avantages de xUnit:

xUnit suit un nouveau concept en évitant les anciennes méthodes "SetUp" et "TearDown". Cela nous oblige à utiliser IDisposable et un constructeur comme nous devrions le faire en tant que développeurs .NET. XUnit a également un concept de partage de contexte clair.

xUnit Inconvénients:

La disponibilité pour obtenir le contexte de test n'est pas encore implémentée.

TakinosaJi
la source
1
Qu'est-ce que le "contexte de test" ? A-t-il déjà été mis en œuvre?
Peter Mortensen
8

L'un des avantages de xUnit est qu'il trouve des tests dans différentes classes; il les exécute en parallèle . Cela peut vous faire gagner beaucoup de temps si vous disposez de nombreux cas de test.

Vous pouvez bien sûr désactiver cette option, ou contrôler son fonctionnement (nombre de threads, threads par classe, tests par assemblage, etc.

Découvrez cet exemple de solution avec deux projets de test, l'un utilisant xUnit l'autre NUnit .

Vous pouvez en savoir plus sur les tests parallèles dans xUnit ici .

Rad
la source
Xunit a-t-il d'autres moyens de faire des tests dans la même classe pour s'exécuter en parallèle?
Magesh