2010-09-27 11 views
8

Roy Osherove, autore di The Art Of Unit Testing, ha commented su un blog che delle molte cose NUnit presumibilmente fa meglio, essendo molto più veloce è uno di loro.Quanto più veloce è NUnit paragonato a MSTest

La mia domanda è quanto più veloce, se non del tutto? Stiamo parlando di un ordine di grandezza? 10%? 50%?

Lo chiedo perché per il momento non riesco a confrontare i due. Sto cercando di impostare il mio progetto di test in modo che sia in un dual-mode in modo che io possa passare da uno all'altro. Sfortunatamente, sto riscontrando un problema con NUnit che si integra con l'ultima versione di Microsoft Moles e anche con lo NUnit is conflicting with a third party library (appears log4net related).

Finora MSTest sembra molto più facile da usare in Visual Studio 2008. Tutti i problemi di versione e problemi di compatibilità con NUnit (almeno per me) mi stanno guidando verso la scelta di MSTest come framework per il progetto (sebbene io possa mantieni l'opzione doppia modalità). Un altro vantaggio per MSTest è che posso ancora usare la maggior parte di NUnit afferma con:

using Assert = NUnit.Framework.Assert; 
using Is = NUnit.Framework.Is; 

Ma .... Se la velocità è veramente molto più veloce in NUnit, allora preferisco usarlo, nonostante i punti di dolore .

Infine, c'è stato un miglioramento della velocità in VS2010 per MSTest?

risposta

6

Bene, mi sono preso il tempo di rimuovere Microsoft Moles e il codice di produzione che si occupava di problemi relativi a log4net in modo da poter effettivamente confrontare i due. Quindi ho eseguito test sia in MSTest 2008 che in NUnit 2.5.2.

Quello che ho scoperto è che MSTest riporta meglio la durata di ogni singolo test. Se il test è sufficientemente veloce in NUnit, viene registrato come 0 secondi sia nel file TestResults.xml sia nella GUI quando si fa clic sulle proprietà di un test. Tuttavia, ho cercato di confrontare la somma di tutte le velocità di test e in alcuni casi NUnit è più veloce e in altri casi MSTest è più veloce. Quando uno è più veloce dell'altro, è di circa il 30%.

Ora, dove NUnit sembra decisamente più veloce è il tempo di attesa prima dell'esecuzione dei test dell'unità. Quando collego la GUI (o console) al VS Debugger ed eseguo il progetto di test, per NUnit occorrono circa 3-6 secondi prima che i test possano essere eseguiti. Con MSTest ci vogliono tra 15-20 secondi. Per MSTest non importa se c'è solo 1 test o 26, questo tempo di caricamento sembra essere lo stesso. Per quanto riguarda il modo in cui questi tempi di attesa si ridimensionano man mano che il progetto di test diventa più grande, ad esempio nelle migliaia di test unitari, non posso commentare la differenza, anche se sarei molto interessato a conoscere.

Anche sembra esserci un po 'di ritardo in MSTest mentre i test sono in esecuzione, forse per aggiornare il riquadro dei risultati. Pertanto, sospetto che le persone affermino che NUnit è molto più veloce di MSTest, a causa dei ritardi di caricamento e aggiornamento, ma il tempo di esecuzione effettivo del test sembra essere molto simile.

2

Ho usato sia MSTest che NUnit (il primo più di quest'ultimo), e non posso dire di aver notato grandi differenze tra loro due per quanto riguarda la velocità (non fraintendetemi, la differenza potrebbe essere lì, non l'ho notato).

Il motivo per cui scelgo MSTest è la sua integrazione con Visual Studio, poiché rende le cose molto più semplici. Inoltre, una volta ho avuto alcuni problemi nell'esecuzione di un paio di test perché i test NUnit venivano eseguiti in un apposito thread diverso da MSTests.

+1

Se l'utilizzo di NUnit e l'integrazione VS sono importanti, è possibile utilizzare plug-in di test runner (come TestDriven.NET e Resharper) per eseguire test di unità all'interno di VS. Non è esattamente la stessa del test runner integrato che funziona solo con MSTest. Ma potrebbe essere una buona soluzione per alcuni. –

Problemi correlati