web-dev-qa-db-fra.com

NUnit vs. MbUnit vs. MSTest vs. xUnit.net

Il existe de nombreux frameworks unittesting pour .NET. J'ai trouvé cette petite comparaison de fonctionnalités: http://xunit.github.io/docs/comparisons.html

Maintenant, je dois choisir le meilleur pour nous. Mais comment? Est-ce que ça importe? Lequel est le plus à l'épreuve du futur et a un élan décent derrière lui? Devrais-je me soucier des fonctionnalités? Bien que xUnit semble être le plus moderne et spécialement conçu pour .NET, NUnit semble être celui qui est largement accepté. MSTest est à nouveau déjà intégré à Visual Studio ...

378
bitbonk

Je sais que c'est un vieux fil, mais je pensais poster un vote pour xUnit.NET . Bien que la plupart des autres infrastructures de test mentionnées soient à peu près les mêmes, xUnit.NET a adopté une approche assez unique, moderne et flexible pour les tests unitaires. Cela change la terminologie, de sorte que vous ne définissez plus TestFixtures and Tests ... vous spécifiez des faits et des théories sur votre code, qui s'intègre mieux au concept de test du point de vue de TDD/BDD.

xUnit.NET est également extrêmement extensible. Ses classes d'attributs FactAttribute et TraitAttribute ne sont pas scellées et fournissent des méthodes de base pouvant être remplacées qui vous donnent un contrôle important sur la manière dont les méthodes que ces attributs décorent doivent être exécutées. Alors que xUnit.NET dans sa forme par défaut vous permet d'écrire avec des méthodes de test des classes de test similaires aux fixtures de test NUnit, vous n'êtes pas du tout limité à cette forme de test unitaire. Vous êtes libre d'étendre le cadre pour prendre en charge les spécifications Concern/Context/Observation de type BDD, comme indiqué ici .

xUnit.NET prend également en charge les tests de style directement avec ses attributs Theory et les attributs de données correspondants. Les données d’adaptation ajustées peuvent être chargées à partir d’Excel, d’une base de données ou même d’une source de données personnalisée, telle qu’un document Word (en étendant l’attribut de données de base.). peut être énorme pour réduire les dépendances aux produits et la formation requise.

D'autres méthodes de test peuvent également être implémentées avec xUnit.NET ... les possibilités sont plutôt illimitées. Combinés à un autre framework moqueur très prospectif, Moq , ils créent une plate-forme très flexible, extensible et puissante pour la mise en œuvre de tests automatisés.

195
jrista

NUnit est probablement le plus supporté par les outils tiers. Cela fait aussi plus longtemps que les trois autres.

Personnellement, je me moque bien des frameworks de tests unitaires, les bibliothèques moqueuses sont un IMHO beaucoup plus important (et vous enferment beaucoup plus). Choisissez-en un et respectez-le.

133

Je n'irais pas avec MSTest. Bien que ce soit probablement la preuve la plus future des infrastructures avec Microsoft, ce n’est pas la solution la plus flexible. Il ne fonctionnera pas seul sans quelques hacks. Il est donc difficile de l'exécuter sur un serveur de build autre que TFS sans installer Visual Studio. Le test-runner de Visual Studio est en réalité plus lent que Testdriven.Net + n’importe lequel des autres frameworks. Et comme les versions de cette infrastructure sont liées aux versions de Visual Studio, le nombre de mises à jour est moins élevé et si vous devez travailler avec un ancien VS, vous êtes lié à un ancien MSTest.

Je ne pense pas que le cadre que vous utilisiez compte beaucoup. C'est vraiment facile de passer de l'un à l'autre.

Personnellement, j'utilise XUnit.Net ou NUnit selon les préférences de mes collègues. NUnit est le plus standard. XUnit.Net est le framework le plus léger.

106
Mendelt

Envisagez de compléter, et non de remplacer, MSTest par un autre cadre de test. Vous pouvez conserver l'intégration de Visual Studio MSTest tout en bénéficiant d'un cadre de test plus complet.

Par exemple, j'utilise xUnit avec MSTest. Ajoutez une référence à l'assembly xUnit.dll et procédez comme suit. Étonnamment, ça marche!

using Microsoft.VisualStudio.TestTools.UnitTesting;
using Assert = Xunit.Assert;  // <-- Aliasing the Xunit namespace is key

namespace TestSample
{
    [TestClass]
    public class XunitTestIntegrationSample
    {
        [TestMethod]
        public void TrueTest()
        {
            Assert.True(true);  // <-- this is the Xunit.Assert class
        }

        [TestMethod]
        public void FalseTest()
        {
            Assert.False(true);
        }
    }
}
20
Matt Crouch

Nunit ne fonctionne pas bien avec les projets en mode mixte en C++ alors j'ai dû le laisser tomber

8
Eric

Ce n'est pas un gros problème à petite échelle/personnelle, mais il peut devenir un gros problème rapidement à plus grande échelle. Mon employeur est un grand magasin Microsoft, mais ne veut pas/ne peut pas acheter Team System/TFS pour un certain nombre de raisons. Nous utilisons actuellement Subversion + Orcas + MBUnit + TestDriven.NET et cela fonctionne bien, mais obtenir TD.NET était un énorme problème. La sensibilité des versions de MBUnit + TestDriven.NET est également un gros problème. Avoir un élément commercial supplémentaire (TD.NET) à des fins de révision légale et de passation de marché à gérer et à gérer n’est pas anodin. Mon entreprise, comme beaucoup d'entreprises, est satisfaite du modèle d'abonnement MSDN et n'est pas habituée à gérer des achats uniques pour des centaines de développeurs. En d'autres termes, l'offre MS entièrement intégrée, même si elle n'est certainement pas toujours la meilleure des solutions, constitue une valeur ajoutée importante à mon avis.

Je pense que nous allons continuer avec notre démarche actuelle car cela fonctionne et nous avons déjà surmonté la bosse organisationnelle, mais je souhaite vraiment que MS ait une offre convaincante dans cet espace afin que nous puissions consolider et simplifier un peu notre pile de développeurs.

8
user8133

Ce n'est pas grave, il est assez facile de basculer entre eux. L'intégration de MSTest n'est pas un gros problème non plus, il suffit de saisir testdriven.net.

Comme la personne précédente a déclaré choisir un cadre moqueur, mon préféré pour le moment est Moq.

7
Bugg