116 votes

Test unitaire, NUnit ou Visual studio ?

J'utilise Visual studio (parfois resharper) pour exécuter mes tests unitaires.

J'ai entendu parler de NUnit, mais je ne sais pas grand chose à son sujet...

Dois-je m'en préoccuper ? Peut-il offrir quelque chose de mieux que visual studio ?

Dois-je utiliser NUnit et pourquoi ?

12 votes

Envisagez également xunit, mais quoi qu'il en soit, jetez un coup d'œil à TestDriven.net

0 votes

0 votes

Essayez xunit.net. Il s'agit d'une source ouverte et d'un cadre de test unitaire efficace pour les applications .net.

102voto

Elisha Points 11999

NUnit présente quelques avantages par rapport à MS-Test

  1. Attribut de suite - permet de regrouper des tests et de les exécuter séparément (utile pour les grands projets avec des tests rapides et lents, par exemple).
  2. Méthode Assert lisible, par exemple Assert.AreEqual(expected, actual) vs Assert.That(actual, Is.EqualTo(expected))
  3. NUnit a des mises à jour de version fréquentes - MS-Test n'en a qu'une par version de VS.
  4. De nombreux outils d'exécution intégrés, dont Resharper et TestDriven.NET
  5. Assertion du message d'exception attendu - peut être réalisée à l'aide d'un attribut dans NUnit mais doit être réalisée à l'aide de Try-Catch dans MS-Test
  6. [TestCase] ! NUnit permet de paramétrer les tests.

32 votes

L'exception peut également être affirmée par l'attribut dans MS-Test : ExpectedExceptionAttribute.

9 votes

J'utiliserais NUnit avec Assert.Throws<>() parce que cela suit le principe AAA, ce qui n'est pas le cas pour la méthode de l'attribut.

0 votes

@Stefan Steinegger, MSTest a prévu un attribut d'exception mais ne peut pas vérifier le texte du message.

72voto

flq Points 11937

De mon point de vue actuel (après 8 mois de développement avec environ 10 développeurs en moyenne), je conseillerais de contre l'utilisation de MSTest pour les raisons suivantes

  • Le cadre en lui-même est assez lent. Je ne parle pas du code de test que vous écrivez - c'est sous votre contrôle. Je parle du cadre qui exécute ces tests est lent, qu'il s'agisse d'une une suite de tests, des tests individuels, etc.
  • La nécessité de conserver un fichier de métadonnées de test ce qui entraîne toujours des complications lorsque plusieurs développeurs travaillent travaillent dessus (recréer par exemple les métadonnées etc.) Toutes les autres suites de tests n'ont pas n'a pas besoin d'un fichier de métadonnées. Il est en quelque sorte d'organiser vos tests mais vous pouvez mais vous pouvez faire la même chose avec les espaces de noms, les classes et les noms de méthodes.
  • Dans le cadre de l'intégration continue, si vous souhaitez exécuter des tests unitaires sur votre machine de construction, vous devrez installer Visual Studio sur cette machine.

En d'autres termes, si je devais décider à nouveau il y a 8 mois, je choisirais probablement NUnit. Je n'aurais peut-être pas le rapport intégré sur les résultats des tests, mais les développeurs bénéficieraient d'une expérience de test plus transparente.

6 votes

+1, évitez MSTest sauf si vous n'avez pas le choix. Les différents frameworks open-source sont meilleurs (xUnit, NUNIT, MbUnit, etc).

49voto

Stefan Steinegger Points 37073

Voici mon expérience avec MS Test

  • Nous utilisons MS Test avec environ 3800 tests.
  • Il faut beaucoup de temps pour que les tests commencent à s'exécuter, ce qui est pénible lorsque l'on exécute des tests individuels.
  • Il faut environ 1 Go de mémoire pour exécuter les tests. Non, ce n'est pas dû à des fuites de mémoire dans nos tests. Nous rencontrons fréquemment des exceptions de type "OutOfMemoryException".
  • Parce qu'il utilise beaucoup de ressources, nous commençons à exécuter les tests à partir de fichiers batch. À quoi sert donc toute cette intégration ?
  • Il est bogué et instable :
    • Par exemple, si vous supprimez l'attribut [Ignorer] d'un test, il ne le reconnaîtra pas, car il met en cache les informations relatives aux tests. Vous devez actualiser la liste des tests, ce qui résout parfois le problème, ou redémarrer VS.
    • Au hasard, il ne copie pas les assemblages de référence dans le répertoireout.
    • Les éléments de déploiement (fichiers supplémentaires à utiliser) ne fonctionnent pas correctement. Ils sont ignorés de manière aléatoire.
  • Les fichiers vsmdi et testrunconfig contiennent des informations cachées (non visibles dans le code de test). Si vous n'en tenez pas compte, il se peut que cela ne fonctionne pas.
  • D'un point de vue fonctionnel, il peut être comparé à NUnit, mais il est très cher si vous envisagez d'utiliser l'édition testeur de VS.

Ajout : Nous avons encore d'autres tests à faire, mais je ne peux même pas dire combien. Il n'est plus possible de les exécuter tous à partir de Visual Studio, à cause d'exceptions OutOfMemoryExceptions et d'autres problèmes d'instabilité. Nous exécutons les tests à partir de scripts. Il serait facile de visualiser les résultats des tests dans Visual Studio, mais lorsque la solution est ouverte, VS plante (à chaque fois). Nous devons donc rechercher les tests qui échouent à l'aide d'une recherche textuelle. Il n'y a plus d'avantage à utiliser un outil intégré.


Une autre mise à jour : Nous utilisons maintenant VS 2013. Beaucoup de choses ont changé. Ils ont réécrit le programme de test MS Test pour la troisième fois depuis que nous avons commencé. Cela a entraîné de nombreuses ruptures, mais aucune des deux nouvelles versions ne s'est améliorée. Nous sommes heureux de ne pas avoir utilisé les fonctionnalités fantaisistes de MS Test, car elles ne sont plus supportées. C'est vraiment dommage. Nous utilisons toujours scripts pour construire et exécuter tous les tests unitaires, parce que c'est plus pratique. Visual Studio avait besoin de quelques minutes pour commencer à exécuter les tests (mesures de temps après la compilation jusqu'à ce que le premier test démarre). Il est probable qu'une mise à jour corrige ce problème et qu'il s'agisse d'un problème spécifique à notre projet. Cependant, Resharper est beaucoup plus rapide lors de l'exécution des mêmes tests.

Conclusion : Au moins en combinaison avec Resharper, MS Test est utile. Et j'espère qu'ils ont finalement trouvé comment le test runner devrait être écrit et qu'ils ne feront pas ce genre de changements lors de la prochaine mise à jour de Visual Studio.

0 votes

J'ai récemment commencé à les exécuter sans les déboguer, ce qui les rend plus faciles à utiliser. beaucoup plus rapide et ressemble beaucoup plus à la façon dont NUnit pourrait être utilisé, mais c'est toujours nul. Il semble que les mauvaises performances soient liées au fait que Visual Studio fait des choses bizarres lors du débogage. (C'est-à-dire, utilisez "ctrl+F5" plutôt que juste "F5" - vous obtenez toujours la belle "intégration" avec VS).

18voto

bastijn Points 2141

NUnit peut être utilisé en combinaison avec visual studio. Il s'agit d'un cadre de travail et non d'un programme distinct. Vous pouvez donc vous en occuper et voir si cela vous convient :).

alt text
(source : <a href="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=nunitit&amp;DownloadId=61802" rel="nofollow noreferrer">codeplex.com </a>)

"Après avoir installé le plugin, vous trouverez un nouveau sous-menu dans le menu Outils.

Véase http://nunitit.codeplex.com/ pour plus d'informations sur son importation.

En outre, on peut trouver beaucoup de choses en utilisant la recherche de SO. Ce thème énumère les avantages de NUnit par rapport aux tests standard de MS, par exemple.

6voto

Maciej Points 2640

Le plus grand avantage de MS-Test par rapport à NUnit est que MS-Test peut générer des objets fantaisie en utilisant Reflection. J'ai trouvé cela très utile

12 votes

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