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

Er zijn nogal wat unittesting-frameworks voor .NET. Ik vond deze kleine functievergelijking: http://xunit.github.io/docs/comparisons.html

Nu moet ik de beste voor ons kiezen. Maar hoe? Maakt het uit? Welke is het meest toekomstbestendig en heeft een behoorlijk momentum? Moet ik me zorgen maken over de functies? Hoewel xUnit het modernst lijkt en speciaal ontworpen voor .NET, lijkt NUnit opnieuw degene die algemeen wordt geaccepteerd. MSTest is opnieuw al geïntegreerd in Visual Studio …


Antwoord 1, autoriteit 100%

Ik weet dat dit een oude thread is, maar ik dacht ik plaats een stem voor xUnit.NET. Hoewel de meeste van de andere genoemde testkaders allemaal vrijwel hetzelfde zijn, heeft xUnit.NET een vrij unieke, moderne en flexibele benadering van unit-testing gekozen. Het verandert de terminologie, dus u definieert niet langer TestFixtures en Tests… u specificeert feiten en theorieën over uw code, die beter integreert met het concept van wat een test is vanuit een TDD/BDD-perspectief.

xUnit.NET is ook UITERST uitbreidbaar. De FactAttribute- en TraitAttribute-attribuutklassen zijn niet verzegeld en bieden overschrijfbare basismethoden die u veel controle geven over hoe de methoden die deze attributen versieren, moeten worden uitgevoerd. Hoewel u met xUnit.NET in zijn standaardvorm testklassen kunt schrijven die vergelijkbaar zijn met NUnit-testarmaturen met hun testmethoden, bent u helemaal niet beperkt tot deze vorm van unit-testing. U bent vrij om het raamwerk uit te breiden om BDD-achtige Concern/Context/Observation-specificaties te ondersteunen, zoals afgebeeld hier.

xUnit.NET ondersteunt ook direct out-of-the-box fit-style testen met zijn Theory-attribuut en bijbehorende data-attributen. Fit-invoergegevens kunnen worden geladen vanuit Excel, database of zelfs een aangepaste gegevensbron zoals een Word-document (door het basisgegevensattribuut uit te breiden). Hierdoor kunt u profiteren van één enkel testplatform voor zowel unit-tests als integratietests, die kan enorm zijn in het verminderen van productafhankelijkheden en vereiste training.

Andere benaderingen van testen kunnen ook worden geïmplementeerd met xUnit.NET…de mogelijkheden zijn vrij onbeperkt. Gecombineerd met een ander zeer toekomstgericht mocking-framework, Moq, creëren de twee een zeer flexibel, uitbreidbaar en krachtig platform voor het implementeren van geautomatiseerd testen.


Antwoord 2, autoriteit 65%

NUnit wordt waarschijnlijk het meest ondersteund door tools van derden. Het bestaat ook al langer dan de andere drie.

Persoonlijk geef ik niet veel om frameworks voor unit-tests, het bespotten van bibliotheken is IMHO veel belangrijker (en sluit je veel meer op). Kies er gewoon een en blijf erbij.


Antwoord 3, autoriteit 52%

Ik zou niet voor MSTest gaan. Hoewel het waarschijnlijk het meest toekomstige bewijs is van de frameworks met Microsoft erachter, is het niet de meest flexibele oplossing. Het zal niet stand-alone draaien zonder enkele hacks. Het is dus moeilijk om het op een andere buildserver dan TFS te draaien zonder Visual Studio te installeren. De visuele studio-testrunner is eigenlijk langzamer dan Testdriven.Net + een van de andere frameworks. En omdat de releases van dit framework gebonden zijn aan releases van Visual Studio zijn er minder updates en als je met een oudere VS moet werken ben je gebonden aan een oudere MSTest.

Ik denk niet dat het veel uitmaakt welke van de andere frameworks je gebruikt. Het is heel gemakkelijk om van de ene naar de andere over te schakelen.

Ik gebruik persoonlijk XUnit.Net of NUnit, afhankelijk van de voorkeur van mijn collega’s. NUnit is de meest standaard. XUnit.Net is het meest slanke framework.


Antwoord 4, autoriteit 11%

Overweeg om MSTest aan te vullen, niet te vervangen, door een ander testraamwerk. U kunt de Visual Studio MStest-integratie behouden terwijl u profiteert van een uitgebreider testraamwerk.

Ik gebruik bijvoorbeeld xUnit met MSTest. Voeg een verwijzing toe naar de xUnit.dll-assembly en doe zoiets als dit. Verrassend genoeg werkt het gewoon!

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);
        }
    }
}

Antwoord 5, autoriteit 5%

Nunit werkt niet goed met mixed-mode projecten in C++, dus ik moest het laten vallen


Antwoord 6, autoriteit 4%

Het is niet erg op kleine/persoonlijke schaal, maar het kan op grotere schaal snel een groter probleem worden. Mijn werkgever is een grote Microsoft-winkel, maar wil/kan om een ​​aantal redenen niet in Team System/TFS kopen. We gebruiken momenteel Subversion + Orcas + MBUnit + TestDriven.NET en het werkt goed, maar het verkrijgen van TD.NET was een enorm gedoe. De versiegevoeligheid van MBUnit + TestDriven.NET is ook een groot gedoe, en het is niet triviaal om één extra commercieel ding (TD.NET) te hebben voor juridische controle en inkoop om te verwerken en te beheren. Mijn bedrijf is, net als veel andere bedrijven, dik en blij met een MSDN-abonnementsmodel, en het is gewoon niet gewend om eenmalige aanbestedingen voor honderden ontwikkelaars af te handelen. Met andere woorden, het volledig geïntegreerde MS-aanbod, hoewel zeker niet altijd het beste, is naar mijn mening een aanzienlijke toegevoegde waarde.

Ik denk dat we bij onze huidige stap zullen blijven omdat het werkt en we organisatorisch al over de hobbel heen zijn, maar ik zou zeker willen dat MS een aantrekkelijk aanbod op dit gebied had, zodat we onze dev-stack konden consolideren en vereenvoudigen. beetje.


Antwoord 7, autoriteit 3%

Het is niet erg, het is vrij eenvoudig om ertussen te schakelen. MSTest geïntegreerd is ook niet erg, pak gewoon testdriven.net.

Zoals de vorige persoon zei: kies een spottend raamwerk, mijn favoriet op dit moment is Moq.

Other episodes