36 votes

Est-ce que je peux faire quelque chose dans NUnit que je ne peux pas faire dans MSTest?

Cette question a été posée dans des formes diverses dans un certain nombre de différents forums, mais, à mon humble avis, je n'ai pas été en mesure de trouver un endroit où il est vraiment répondu clairement, donc je vais recadrer et demander à nouveau.

Je travaille dans une Boutique Microsoft. Nous utilisons TSF, et l'ensemble de nos développeurs ont d'abonnements MSDN, y compris l'Équipe de l'édition de la Suite de VS. Nous avons donc accès à MSTest.

J'ai lu les différents NUnit vs MSTest comparaisons, et la communauté des développeurs semble assez beaucoup choisissent massivement NUnit. Mais les raisons ne sont pas toujours semblent être écrasante ou convaincante, au moins à notre situation. (NUnit est mis à jour plus souvent, NUnit est plus rapide, NUnit ne nécessite pas de TSF, etc.)

Je peux utiliser NUnit si j'ai à choisir, mais à l'utilisation de logiciels open source sans un soutien officiel derrière il doit être défendu. J'ai besoin d'un assez de raison impérieuse de le faire.

Ce que je n'ai de réponse à justifier l'utilisation de NUnit, de préférence à MSTest est ceci: est-il rien que je peux faire dans NUnit que je ne peux pas faire avec effort comparable dans MSTest?

41voto

RoyOsherove Points 2302
  • NUnit contient une [TestCase] attribut qui permet la mise en œuvre de tests paramétrés. Cela n'existe pas hors de la boîte dans MSTest - il peut être fait par l'extensibilité bien.
  • MsTest de ExpectedException attribut a un bug où le message attendu n'est jamais vraiment affirmé, même si c'est faux - que le test sera concluant.
  • NUnit est livré avec une Assertion.Jette API pour permettre de tester une exception sur une ligne de code spécifique au lieu de l'ensemble de la méthode. Une fonctionnalité similaire existe pour MSTest (mis en œuvre par la même personne qui a fait ça pour NUnit) mais n'est pas livré avec MSTest.
  • NUnit contient un fluide version d'Affirmer API hors de la boîte. MSTest a tiers des extensions qui font cela, mais aucun n'est fourni avec MSTest.
  • NUnit permet de classes abstraites pour être d'appareils de test (de sorte que vous pouvez hériter d'appareils de test). MsTest permet cela, mais les limites de classes abstraites pour une seule assemblée.
  • NUnit permet non publics classes d'appareils de test (en date de la version la plus récente)
  • NUnit a été créée UNIQUEMENT pour l'idée de l'unité de test. MSTest a été créé pour les Tests, et aussi un peu de tests unitaires.
  • NUnit contient PNunit (l'exécution de tests en parallèle avec NUnit). MSTest ajouté cette capacité dans Visual Studio 2010 qui est configurable via XML

24voto

Euan Garden Points 341

Roy, Tas de vos informations de date, d'autant qu'il se rapporte à 2010;

Nunit contient une [TestCase] attribut qui permet la mise en œuvre de tests paramétrés. cela n'existe pas en MSTest

Cela peut être mis en œuvre à l'aide du test de l'unité d'extensibilité en 2010.

MSTest de ExpectedException attribut a un bug où le message attendu n'est jamais vraiment affirmé, même si c'est faux - que le test sera concluant.

Correct c'est toujours là

NUnit a une Assertion.Jette API pour permettre de tester une exception sur une ligne de code spécifique au lieu de l'ensemble de la méthode (vous pouvez facilement implémenter celle-ci tout de même)

Jim mis une version de l'Affirmer.Jette pour MSTest dans le même temps, comme il l'a fait à l'origine de la mise en œuvre de NUnit, NUnit est inclus dans les versions ultérieures, MSTest a pas, il est toujours possible de l'utiliser si.

NUnit contient un fluide version d'Affirmer API (comme déjà mentionné - Valoir.Que..)

Il ya plusieurs de ces mises en œuvre par le 3e parties pour MSTest

NUnit est beaucoup plus rapide

Voir Jamie commentaire, il a réussi à obtenir MSTest courir plus vite :-)

NUnit peut exécuter des tests en 32 et 64 bits (MSTest ne fonctionne en 32 bits IIRC)

Pas en 2010, 64 bits support est construit dans.

NUnit permet de classes abstraites pour être d'appareils de test (de sorte que vous pouvez hériter d'appareils de test). MsTest ne le fait pas.

Cela fonctionne, mais pas à travers des assemblées qui limite son utilité.

NUnit permet non publics classes d'appareils de test (en date de la version la plus récente)

Toujours là

NUnit a été créée UNIQUEMENT pour l'idée de l'unité de test. MSTest a été créé pour les Tests, et aussi un peu de tests unitaires.

Correct, il y a beaucoup de tort que de MSTest est le même que Nunit mais MSTest est un cadre général.

NUnit contient PNunit (l'exécution de tests en parallèle avec NUnit). MSTest ajoute cette capacité dans vs 2010

Correct il y a un paramètre de configuration XML qui permet le contrôle du degré de parallélisme.

8voto

serg10 Points 10157

NUnit a une riche affirmer API. L'api est particulièrement élégant (fluent, même), par exemple

Assert.That(Is.Unique, myResults);  // assert: myResults is a collection of unique items

Si vous avez vu le Hamcrest extensions de JUnit, vous reconnaîtrez ce style.

Il dispose également d'un croissant d'usagers, tels que les tests de performance et un excellent VS plugin.

7voto

TrueWill Points 14855

Je peux vous diriger vers un couple de blogs sur les frustrations avec MSTest:

Pour être juste, ces gens essaient de créer des MSTest sur la non-build TFS serveurs. Certains de leurs problèmes ne vont pas s'appliquer à votre situation.

Nous sommes principalement une boutique Microsoft, et l'utilisation de TFS pour le contrôle de source. Cependant, nous utilisons TeamCity pour une Intégration Continue; nous l'aimons, et il s'intègre assez bien avec TFS. Je n'ai jamais utilisé MSTest; nous avons été à l'aide de NUnit pendant des années, et n'ai vu aucune raison de changer.

MSTest est censé avoir une intégration étroite avec l'Équipe de la Suite, qui (étant donné que votre entreprise a déjà payé la scandaleuse des frais pour cela), c'est un point en sa faveur.

NUnit qui vient avec moins de vendor lock-in, et a une API riche. Comme serg10 souligné, l'Assertion.Cette syntaxe est particulièrement puissant et élégant.

En fin de compte, vous pouvez écrire de bons tests unitaires sans toutes les caractéristiques de fantaisie. Certains d'entre eux peuvent même obtenir de la manière (ce qui est la théorie derrière xUnit.net). Je recommanderais que votre équipe se standardiser sur un framework de test; éviter d'avoir un peu de code dans MSTest et d'autre code dans NUnit.

Je pense que l'écriture de bons tests est plus important que votre choix de cadres. Envisager la lecture de l'Art de L'Unité de Test: avec des Exemples en .NET, écrivant quelques tests, puis de voir si MSTest est suffisant pour vos besoins de son équipe.

EDIT: l'Annexe B de L'Art de Tests Unitaires a quelques bons commentaires sur Microsoft Framework de Test Unitaire. Il mentionne YUnit comme un exemple de la façon dont la lourdeur est l'extension des MSTest. Cependant, l'auteur ne suggèrent MSTest pour l'Équipe utilisateurs du Système en raison de l'étroite intégration.

5voto

Stephane Points 4258

J'ai une belle manière entre MsTest et NUnit. Vous pouvez utiliser le MSTest cadre pour exécuter vos tests (TestClass attribut et TestMethod attribut pour chaque test) mais l'utilisation de la NUnit Affirmer API.

faites simplement ceci :

using Microsoft.VisualStudio.TestTools.UnitTesting; 
using Assert = NUnit.Framework.Assert;  

maintenant, vous pouvez utiliser Assert.Que(..) et encore TFS automatisé de construction et de rapport d'essai. votre test peut être exécuté dans VS, TestDriven.net ou Resharper, ce n'est pas grave, le test échouera ou passer correctement, et l'échec de sortie sera en fonction de NUnit cadre.

voir ici : http://alsagile.com/archive/2010/03/09/stop-the-war-between-nunit-and-mstest-make-them.aspx

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