NUnit contro xUnit


110

Quali sono le differenze tra NUnit e xUnit.net ? Che senso ha svilupparne due, non solo uno?

Ho letto che xUnit è stato sviluppato dall'inventore di NUnit:

xUnit.net è uno strumento di unit test per .NET Framework. Scritto dall'inventore originale di NUnit

D'altro canto:

NUnit è un framework di unit test per tutti i linguaggi .Net .. l'attuale versione di produzione, la versione 2.6, è la settima versione principale di questo strumento di unit test basato su xUnit

Allora dov'è la verità?


3
Come ha sottolineato @Joey, questo non è un duplicato diretto della domanda collegata. In questo caso, il PO ha fondamentalmente frainteso qualcosa; vale a dire la differenza tra xUnit.net - lo strumento di unit test e x Unit - il termine generalizzato per la classe dei framework di unit test (nUnit, jUnit, ecc.). Votazioni per riaprire.
Rob Levine

Risposte:


131

Al momento della stesura di questa risposta, l'ultima versione di NUnit è v3.5 e xUnit.net è v2.1.

Entrambi i framework sono fantastici ed entrambi supportano l'esecuzione di test paralleli (in un modo diverso però). NUnit è in circolazione dal 2002, è ampiamente utilizzato, ben documentato e ha una vasta comunità, mentre xUnit.net è più moderno, più aderente a TDD, più estensibile e anche di tendenza nello sviluppo di .NET Core. È anche ben documentato.

In aggiunta a ciò, la differenza principale che ho notato è il modo in cui xUnit.net esegue i metodi di test. Quindi, in NUnit , abbiamo una classe di test e una serie di metodi di test. NUnit crea una nuova istanza della classe di test e quindi esegue tutti i metodi di test dalla stessa istanza. Mentre xUnit.net crea una nuova istanza della classe di test per ciascuno dei metodi di test.. Pertanto, non è possibile utilizzare campi o proprietà per condividere dati tra metodi di test, il che è una cattiva pratica, poiché i nostri metodi di test dipenderebbero l'uno dall'altro, il che non è accettabile in TDD. Quindi, se usi xunit.net, potresti essere sicuro che i tuoi metodi di test sono completamente isolati.

Se sei disposto a condividere alcuni dati tra i tuoi metodi di prova, xUnit te lo permetterà. Pertanto, per impostazione predefinita, tutti i metodi di test sono completamente isolati, ma in casi specifici è possibile rompere intenzionalmente questo isolamento. Mi piace questo atteggiamento, ecco perché mi piace di più.


4
Per maggiori dettagli controlla il mio ultimo post: codopia.wordpress.com/2017/02/20/…
akazemis

2
Quello che scrivi sull'esecuzione parallela non è vero. Forse era al momento del tuo post ma ora non lo è. Controlla questo xunit.net/docs/running-tests-in-parallel . Dice che i metodi di test in una classe non verranno mai eseguiti parallelamente.
Gondil

Grazie @Gondil, hai ragione, non eseguirà metodi di una singola classe in parallelo. ottimizzato il parallelismo bit
akazemis

1
Non sono sicuro di come hai scoperto che xUnit è "ben documentato", poiché chiaramente non lo è. Tutte le informazioni devono essere trovate attraverso fonti della comunità e domande su stackoverflow invece di una buona documentazione come fa NUnit. Ero davvero entusiasta di xUnit dopo la tua risposta, ma ho pensato che NUnit sembra funzionare bene anche in .NET Core.
CularBytes

1
@Loaderon L'ho postato circa 4 anni fa e da allora uso xunit fino ad ora. la documentazione e la comunità sono molto migliori di prima e ora sono più mature. quindi usa XUnit con la massima tranquillità, non avrai bisogno di fallback su NUnit. :)
akazemis

33

Stai confondendo il nome di un singolo strumento ( xUnit.net ) con il nome di un'intera classe di framework di unit test ( xUnit , la x che si riferisce a un linguaggio / ambiente, ad esempio JUnit, NUnit, ...).


1
Peccato che questo sia stato chiuso, dal momento che non è un duplicato diretto - hai ragione - l'OP si è confuso tra due termini che sono quasi uguali.
Rob Levine

Ho leggermente cambiato il titolo, per assicurarmi che non ci sia confusione.
Ruslan

1
Non sono andato dal titolo, ma piuttosto dai segmenti evidenziati delle citazioni nella tua domanda. Ma forse ti ho frainteso.
Joey

8

xUnit Pro:

xUnit segue un nuovo concetto evitando i vecchi metodi "SetUp" e "TearDown". Ci costringe a usare IDisposable e un costruttore come dovremmo fare come sviluppatori .NET. Anche xUnit ha un chiaro concetto di condivisione del contesto.

xUnit Contro:

La disponibilità per ottenere il contesto di test non è ancora implementata.


1
Che cos'è il "contesto di test" ? È già stato implementato?
Peter Mortensen

8

Un vantaggio di xUnit è che trova test in classi diverse; li esegue in parallelo . Questo può far risparmiare molto tempo se hai molti casi di test.

Ovviamente puoi disattivarlo o controllarne il funzionamento (numero di thread, thread per classe, test per assembly, ecc.

Dai un'occhiata a questa soluzione di esempio con due progetti di test, uno che utilizza xUnit e l'altro NUnit .

Puoi leggere di più sui test paralleli in xUnit qui .


Xunit ha altri modi per eseguire test in parallelo nella stessa classe?
Magesh
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.