NUnit vs. MbUnit vs. MSTest vs. xUnit.net [chiuso]


390

Esistono molti framework unittesting per .NET. Ho trovato questo piccolo confronto delle funzionalità: http://xunit.github.io/docs/comparisons.html

Ora devo scegliere quello migliore per noi. Ma come? Importa? Qual è la prova più futura e ha un momento decente dietro? Dovrei preoccuparmi delle funzionalità? Mentre xUnit sembra essere il più moderno e specificamente progettato per .NET, NUnit sembra essere quello che è ampiamente accettato. MSTest è già integrato in Visual Studio ...


11
Tale tabella comparativa è obsoleta da anni. Ad esempio, NUnit ha anche Assert.Throws ecc. E tutto nella tabella Asserzioni è la vecchia API. La nuova sintassi fluida di Assert.That (..., Is ....) è molto più piacevole ed è in circolazione da un bel po 'di tempo.
Jim Cooper,

11
Conosci qualche tavolo più aggiornato?
Bitbonk,

1
Fine del 2013, spostato da xUnit.net => NUnit. Si noti inoltre che xUnit.NET (il progetto)! = XUnit (la categoria, di cui NUnit è membro)
DeepSpace101

3
@Sid perché ti sei trasferito da xUnity.net => NUnit?
Alexander Logger,

2
Domanda simile posta nel 2014 in Visual Studio 2013 MSTest vs NUnit
Michael Freidgeim,

Risposte:


197

So che questo è un vecchio thread, ma ho pensato di pubblicare un voto per xUnit.NET . Mentre la maggior parte degli altri framework di test citati sono praticamente tutti uguali, xUnit.NET ha adottato un approccio al test unitario piuttosto unico, moderno e flessibile. Cambia la terminologia, quindi non definisci più TestFixture e Test ... specifichi Fatti e Teorie sul tuo codice, che si integra meglio con il concetto di cosa sia un test da una prospettiva TDD / BDD.

xUnit.NET è anche ESTREMAMENTE estensibile. Le sue classi di attributi FactAttribute e TraitAttribute non sono sigillate e forniscono metodi di base sostituibili che ti danno molto controllo su come eseguire i metodi decorati da quegli attributi. Mentre xUnit.NET nella sua forma predefinita consente di scrivere classi di test simili ai dispositivi di prova NUnit con i loro metodi di prova, non si è affatto limitati a questa forma di unit test. Sei libero di estendere il framework per supportare le specifiche di preoccupazione / contesto / osservazione in stile BDD, come illustrato qui .

xUnit.NET supporta anche test di adattamento direttamente fuori dalla scatola con l'attributo Teoria e gli attributi dati corrispondenti. I dati di input adattati possono essere caricati da Excel, dal database o persino da un'origine dati personalizzata come un documento di Word (estendendo l'attributo dei dati di base.) Ciò consente di capitalizzare su un'unica piattaforma di test sia per unit test che per test di integrazione, che può essere enorme nel ridurre le dipendenze dei prodotti e la formazione richiesta.

Altri approcci ai test possono anche essere implementati con xUnit.NET ... le possibilità sono piuttosto illimitate. In combinazione con un altro framework beffardo lungimirante, Moq , i due creano una piattaforma molto flessibile, estensibile e potente per l'implementazione di test automatizzati.


35
Sebbene ciò fosse vero un anno + fa, NUnit da allora ha aggiunto la maggior parte degli attributi in questione. In NUnit puoi scrivere test in entrambi i modi.
Mark Levison,

8
Non è tanto su quali attributi sono disponibili, ma su come possono essere utilizzati. xUnit.NET è stato progettato da zero per essere un framework altamente flessibile ed estensibile che non ti ha bloccato in alcun particolare metodo di test e non richiede l'aggiornamento periodico del framework principale per ottenere le funzionalità più recenti.
jrista,

9
1. Nomi leggermente diversi sugli attributi non hanno molto senso. 2. NUnit era estensibile e continua ad essere estensibile:? 3. I parametri della riga di dati per i test sono supportati in nunit. Tempo fa erano supportati in un'estensione :) 4. Nunit combinata con Moq crea la stessa cosa. 5. Per BDD direi specflow, che si integra facilmente con molti framework di unit test.
Graffic

8
Mi piace il suono di xUnit, tuttavia ha una documentazione zilch :(
Colonnello Panic,

10
xUnit non ha alcuna documentazione! ad esempio: prova a trovare ciò Traitche fa realmente o se puoi raggruppare diversi test all'interno del test monoparentale (ad es. tutti testsin a testfixture). nUnit crea una grande vista gerarchica invece della vista piatta dei test di xUnit. Inoltre la nomenclatura non ha senso: fatti e teoria? Sii realista! Questi sono meglio chiamati test e dati.
DeepSpace101,

134

NUnit è probabilmente il più supportato dagli strumenti di terze parti. È stato anche in giro più a lungo rispetto agli altri tre.

Personalmente non mi interessa molto dei framework di unit test, le librerie beffardo sono molto più importanti per IMHO (e ti bloccano molto di più). Basta sceglierne uno e attenersi ad esso.


3
qual è la tua scelta migliore per la tua biblioteca finta?
dplante,

31
Mi piace Moq, anche RhinoMocks è buono.
Alexander Kojevnikov,

5
Potrebbe anche valere la pena controllare Pex e Moles, la parte delle talpe è particolarmente utile per deridere.
Charles Prakash Dasari,

4
MSPec con FakeItEasy ... rendendo i casi di test più leggibili
Robie il

5
MSpec con NSubstitute e AutoFixture è la mia scelta.
Daniel Hilgarth,

108

Non andrei con MSTest. Sebbene sia probabilmente la prova più futura dei framework con Microsoft dietro non è la soluzione più flessibile. Non funzionerà da solo senza alcuni hack. Quindi eseguirlo su un server di build diverso da TFS senza installare Visual Studio è difficile. Il test-runner di Visual Studio è in realtà più lento di Testdriven.Net + di qualsiasi altro framework. E poiché le versioni di questo framework sono legate alle versioni di Visual Studio, ci sono meno aggiornamenti e se devi lavorare con un VS più vecchio sei legato a un MSTest più vecchio.

Non penso che importi molto quale degli altri framework utilizzi. È davvero facile passare da uno all'altro.

Personalmente uso XUnit.Net o NUnit a seconda delle preferenze dei miei colleghi. NUnit è il più standard. XUnit.Net è il framework più snello.


36
Sono stato trascinato calci e urlando per questa stessa conclusione. Volevo davvero usare MSTest a causa della sua integrazione con Visual Studio, ma questa è anche la sua debolezza. Ho bisogno di eseguire test su un server di build non Microsoft e non è possibile installare Visual Studio su di esso solo per ottenerlo. È un peccato che Microsoft produca ottimi strumenti e li renda quasi irraggiungibili.
Tim Long

11
+1 per aver chiamato la terribile MSTest. Alla fine della giornata, non importa quale framework di test unitari usi, purché non sia MSTest
Mike Mooney

21

Valuta di integrare, non sostituire, MSTest con un altro framework di test. È possibile mantenere l'integrazione di Visual Studio MSTest ottenendo i vantaggi di un framework di test più completo.

Ad esempio, utilizzo xUnit con MSTest. Aggiungi un riferimento all'assembly xUnit.dll e fai qualcosa del genere. Sorprendentemente, funziona e basta!

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

Questa tecnica può funzionare anche con NUnit, MBUnit o altri framework di test citati in altre risposte, ma non li ho provati.
Matt Crouch,

1
pensi che potrei ottenere test con parametri per lavorare con MSTest con questo approccio, Matt?
DevDave,

@DevDave No. Nel suo esempio ha appena usato una classe di un altro assembly. Se si desidera eseguire test con parametri, è necessario un altro framework di test appositamente sviluppato per estendere MSTest.
zoran404,

3
Suprisingly, it just works!Hai appena chiamato una funzione statica da un altro assembly. Perché sei sorpreso che funzioni? Anche se hai solo bisogno di affermazioni che perché non usare un assemblaggio appositamente realizzato per quello?
zoran404,

9

Nunit non funziona bene con i progetti in modalità mista in C ++, quindi ho dovuto abbandonarlo


3
Non sono orgoglioso di questa risposta, ma ho abbandonato i test unitari per quel progetto. Ho fatto ricorso a molte procedure di convalida per il rilevamento di errori in fase di esecuzione
Eric

2
Avevo sperato di usare NUnit in modalità mista, ma l'ho anche trovato inadeguato, alla fine sono andato su googletest che è un eccellente framework di test di unità C ++ e v semplice da configurare.
Chillitom,

8

Non è un grosso problema su piccola scala / personale, ma può diventare rapidamente un grosso problema su una scala più grande. Il mio datore di lavoro è un grande negozio Microsoft, ma non può / non può acquistare in Team System / TFS per diversi motivi. Attualmente utilizziamo Subversion + Orcas + MBUnit + TestDriven.NET e funziona bene, ma ottenere TD.NET è stata una seccatura enorme. La sensibilità della versione di MBUnit + TestDriven.NET è anche una seccatura, e avere un ulteriore aspetto commerciale (TD.NET) per la revisione legale e l'approvvigionamento da gestire e gestire, non è banale. La mia azienda, come molte aziende, è grassa e soddisfatta di un modello di abbonamento MSDN, e non è abituata a gestire acquisti una tantum per centinaia di sviluppatori. In altre parole, l'offerta per la SM pienamente integrata, sebbene sicuramente non sia sempre la migliore, a mio avviso rappresenta un valore aggiunto significativo.

Penso che continueremo con il nostro passo attuale perché funziona e abbiamo già superato la gobba organizzativamente, ma di certo vorrei che MS avesse un'offerta convincente in questo spazio in modo da poter consolidare e semplificare un po 'il nostro stack di sviluppo.


2
ReSharper ha un'offerta convincente in questo spazio!
Scoiattolo,

7
La tua risposta è curiosa e sembra contraddittoria. Dici di essere un grande Microsoft-shop, ma non utilizzerai TFS (che è il punto centrale - non otterrai il vantaggio dell'integrazione verticale senza di esso) e utilizzerai un modello di abbonamento MSDN, ma stai utilizzando un non Approccio MS. Sono perso, a dire il vero. Sfortunatamente una risposta obsoleta.
nicodemus13

6

Non è un grosso problema, è abbastanza facile passare da uno all'altro. Anche l'integrazione di MSTest non è un grosso problema, basta prendere testdriven.net.

Come la persona precedente ha detto di scegliere un quadro beffardo, il mio preferito al momento è Moq.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.