255 votes

NUnit vs. les projets de test de Visual Studio 2008 pour les tests unitaires

Je vais commencer un nouveau projet au travail et je veux me lancer dans les tests unitaires. Nous utiliserons Visual Studio 2008, C#, et le matériel ASP.NET MVC. J'envisage d'utiliser NUnit ou les projets de test intégrés de Visual Studio 2008, mais je suis ouvert à d'autres suggestions. Un système est-il meilleur que l'autre ou peut-être plus facile à utiliser/comprendre que l'autre ?

Je cherche à mettre en place ce projet comme une sorte de "meilleure pratique" pour nos efforts de développement à venir.

99voto

Mendelt Points 21583

Daok nommé tous les avantages des projets de test Visual Studio 2008. Voici les avantages de NUnit.

  • NUnit dispose d'un cadre de simulation (mocking).
  • NUnit peut être exécuté en dehors du IDE. Cela peut être utile si vous voulez exécuter des tests sur un serveur de construction non-Microsoft, comme CruiseControl.NET .
  • NUnit a plus de versions qui sortent que Visual Studio. Vous n'avez pas à attendre des années pour une nouvelle version. Et vous n'avez pas besoin d'installer une nouvelle version de l'IDE pour obtenir de nouvelles fonctionnalités.
  • Des extensions sont en cours de développement pour NUnit, comme row-tests, etc.
  • Les tests de Visual Studio prennent beaucoup de temps pour démarrer pour une raison quelconque. Cette solution est meilleur dans Visual Studio 2008, mais c'est encore trop lent à mon goût. Exécution rapide d'un test pour voir si vous n'avez pas cassé quelque chose peut prendre trop de temps. NUnit avec quelque chose comme Testdriven.Net pour exécuter des tests depuis l'IDE est en fait beaucoup plus rapide. Surtout quand on exécute des tests uniques. Selon Kjetil Klaussen, cela est dû au testrunner de Visual Studio. L'exécution des tests MSTest dans TestDriven.Net rend les performances de MSTest comparables à celles de NUNIT.

0 votes

Je crois également que les tests unitaires VS ne sont pas disponibles dans la version professionnelle de Visual Studio (du moins, ils ne l'étaient pas dans VS2005). Le groupe MS Patterns and Practices fournit les versions MS et NUnit de leurs tests unitaires, donc ils reconnaissent manifestement qu'il s'agit d'un problème pour beaucoup d'entre nous, les utilisateurs les plus pauvres !

0 votes

Je crois me souvenir que cela a changé pour 2008. Mais je n'en suis pas sûr. Mon patron m'a donné l'édition d'équipe avec toutes sortes de fonctionnalités à ignorer :-)

0 votes

D'après mon expérience, la lenteur des performances est causée par le testrunner dans VS - et non par le cadre de test lui-même. Vous pouvez également utiliser TestDriven.Net sur MSTest, et les performances sont comparables à celles de NUNIT, pour autant que je sache.

64voto

Tuomas Hietanen Points 2615

Le cadre de test unitaire n'a en fait pas beaucoup d'importance, car vous pouvez convertir les classes de test avec des fichiers de projet séparés et une compilation conditionnelle (comme ceci, Visual Studio → NUnit) :

 #if !NUNIT
  using Microsoft.VisualStudio.TestTools.UnitTesting;
 #else
  using NUnit.Framework;
  using TestClass = NUnit.Framework.TestFixtureAttribute;
  using TestMethod = NUnit.Framework.TestAttribute;
  using TestInitialize = NUnit.Framework.SetUpAttribute;
  using TestCleanup = NUnit.Framework.TearDownAttribute;
  using TestContext = System.String;
  using DeploymentItem = NUnit.Framework.DescriptionAttribute;
 #endif

Le plugin TestDriven.Net est sympa et pas très cher... Avec Visual Studio 2008, vous devez trouver le test dans votre classe ou votre liste de tests. Avec TestDriven.Net vous pouvez exécuter votre test directement à partir de la classe que vous testez. Après tout, les tests unitaires doivent être faciles à maintenir et proches du développeur.

12 votes

J'ai voté contre cette option parce que NUnit a une syntaxe plus riche que MSTest, ce qui signifie que vous pouvez passer de MSTest -> NUnit, mais pas vice versa, sauf si vous êtes TRÈS prudent. L'histoire montre qu'au moins un d'entre nous ne l'est pas.

2 votes

Je suis d'accord avec Thomas. Cela fonctionnera si vous utilisez les instructions assert les plus basiques, mais le modèle de contraintes de NUnit est très puissant et c'est une raison suffisante pour choisir NUnit plutôt que MSTest.

0 votes

Je crois que c'est l'approche adoptée par le groupe ms pattern and practice dans les tests EntLib.

34voto

Simara Points 715

Avantages/changements du cadre de test unitaire intégré à Visual Studio 2008 :

  1. La version 2008 est maintenant disponible dans éditions professionnelles (auparavant, elle nécessitait des versions coûteuses de Visual Studio, et et ceci uniquement pour les tests unitaires développeurs) qui laissait beaucoup de développeurs avec le seul choix de cadres de test ouverts/externes.
  2. API intégrée prise en charge par une seule entreprise.
  3. Utilisez les mêmes outils pour exécuter et créer des tests (vous pouvez également les exécuter en utilisant la ligne de commande). MSTest ).
  4. Conception simple (il est vrai sans cadre de simulation, mais c'est un excellent point de départ pour de nombreux programmeurs).
  5. Soutien à long terme accordé (je me souviens encore de ce qui est arrivé à NDoc et je ne veux pas m'engager dans un cadre de test qui pourrait ne plus être supporté dans cinq ans, mais je considère toujours NUnit comme un excellent cadre).
  6. Si vous utilisez Team Foundation Server comme backend, vous pouvez créer des work items ou des bugs avec les données de test échouées de manière simple.

4 votes

Je pense que le fait qu'il ne soit PAS dans la version standard, mais seulement dans la version professionnelle et supérieure, est révélateur de la vision de Microsoft sur les tests.

0 votes

Je suis d'accord, j'adorerais le voir en standard et plus. Dans les versions express, ce sera trop pour un débutant.

1 votes

@J Wynia : Lire leur décision de ne l'inclure que dans les versions Professional et supérieures comme une indication de leur point de vue sur les tests est une lecture excessive. Il s'agit plus probablement d'une décision commerciale que d'une décision philosophique.

33voto

Patrick Desjardins Points 51478

J'utilise NUnit depuis deux ans. Tout va bien, mais je dois dire que le système de test unitaire de Visual Studio est plutôt agréable, parce qu'il se trouve à l'intérieur de l'interface graphique et qu'il peut plus facilement faire un test pour une fonction privée sans avoir à s'embrouiller.

De plus, les tests unitaires de Visual Studio vous permettent de faire du recouvrement et d'autres choses que NUnit seul ne peut pas faire.

0 votes

Je me demande comment je pourrais tester une fonction privée en utilisant VS ? Je n'ai trouvé qu'un moyen de changer sa portée en public. Existe-t-il une autre méthode ?

0 votes

Cliquez avec le bouton droit de la souris sur la fonction privée et sélectionnez "Créer un accesseur privé".

44 votes

Tu ne devrais pas toucher tes parties intimes. Toute plaisanterie mise à part, une école de pensée est que tout ce que vous devez tester sont vos méthodes publiques. L'appel de toutes vos méthodes publiques devrait appeler toutes vos méthodes privées. Si une méthode privée n'est pas appelée par une méthode publique, la méthode privée est redondante.

14voto

Tarsier Points 1476

Un léger inconvénient du cadre de test de Visual Studio est qu'il crée de nombreux fichiers d'exécution de test qui ont tendance à encombrer le répertoire de votre projet - bien que ce ne soit pas un problème majeur.

De plus, si vous ne disposez pas d'un plugin tel que TestDriven.NET En effet, vous ne pouvez pas déboguer vos tests unitaires NUnit (ou MbUnit, xUnit, etc.) dans l'environnement Visual Studio, comme vous pouvez le faire avec le cadre de test Microsoft Visual Studio, qui est intégré.

3 votes

Vous pouvez déboguer les tests NUnit dans Visual Studio 2005.

0 votes

Vous pouvez également déboguer xunit, mais la façon de le faire n'est pas évidente (page des propriétés).

1 votes

Vous pouvez facilement déboguer NUnit en attachant le débogueur au processus NUnit en cours comme l'a dit grimus. Aucun inconvénient réel ici.

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