2010-09-27 13 views
8

Roy Osherove, Autor von The Art Of Unit Testing auf einem Blog hat commented, dass von den vielen Dingen, NUnit angeblich besser tut, ist es viel schneller ist einer von ihnen.Wie viel schneller ist NUnit im Vergleich zu MSTest

Meine Frage ist, wie viel schneller obwohl, wenn überhaupt? Sprechen wir eine Größenordnung? 10%? 50%?

Ich frage das, denn im Moment kann ich die beiden nicht vergleichen. Ich versuche, mein Testprojekt in einem dual-mode einzurichten, so dass ich zwischen ihnen wechseln kann. Leider habe ich ein Problem mit NUnit Integration mit der neuesten Version von Microsoft Moles, und auch NUnit is conflicting with a third party library (appears log4net related).

Bis jetzt scheint MSTest so viel einfacher in Visual Studio 2008 zu verwenden. Alle Versionsprobleme und Kompatibilitätsprobleme mit NUnit (zumindest für mich) steuern mich dazu, MSTest als Rahmen für das Projekt zu wählen (obwohl ich vielleicht behalte die Dual-Modus-Option). Ein weiteres Plus für MSTest ist, dass ich immer noch die meisten NUnit behauptet mit verwenden:

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

Aber .... Wenn die Geschwindigkeit wirklich viel schneller in NUnit ist, dann würde ich es vorziehen, es zu benutzen, trotz der Schmerzen Punkte .

Zuletzt gab es irgendwelche Geschwindigkeitsverbesserung in VS2010 für MSTest?

Antwort

6

Nun, ich nahm mir die Zeit, um Microsoft Moles und den Produktionscode zu entfernen, der sich mit log4net-bezogenen Problemen befasste, so dass ich die beiden tatsächlich vergleichen konnte. Dann habe ich Tests sowohl in MSTest 2008 als auch in NUnit 2.5.2 durchgeführt.

Was ich herausgefunden habe, ist, dass MSTest die Dauer jedes einzelnen Tests besser berichtet. Wenn der Test in NUnit schnell genug ist, wird er sowohl in der Datei TestResults.xml als auch in der GUI als 0 Sekunden protokolliert, wenn man auf die Eigenschaften eines Tests klickt. Trotzdem habe ich versucht, die Summe aller Testgeschwindigkeiten zu vergleichen und in einigen Fällen ist NUnit schneller und in anderen Fällen ist MSTest schneller. Wenn man schneller ist als der andere, ist es etwa 30%.

Nun, wo NUnit definitiv schneller scheint, ist die Wartezeit, bevor die Unit-Tests laufen. Wenn ich die GUI (oder Konsole) an den VS Debugger anschließe und das Testprojekt ausfühle, dauert es etwa 3 bis 6 Sekunden, bis NUnit gestartet und geladen werden kann, bevor die Tests ausgeführt werden können. Mit MSTest dauert es zwischen 15-20 Sekunden. Für MSTest spielt es keine Rolle, ob es nur 1 Test oder 26 gibt, diese Ladezeit scheint die gleiche zu sein. Was die Wartezeiten angeht, die sich ergeben, wenn das Testprojekt größer wird, sagen wir in den Tausenden von Einzeltests, kann ich den Unterschied nicht kommentieren, obwohl ich sehr daran interessiert wäre, dies zu wissen.

Es scheint auch eine kleine Verzögerung in MSTest zu geben, während die Tests laufen, vielleicht um den Ergebnisbereich zu aktualisieren. So vermute ich, wenn Leute sagen, dass NUnit viel schneller als MSTest ist, ist es wegen der Lade- und Aktualisierungsverzögerungen, aber die tatsächliche Testausführungszeit scheint sehr ähnlich zu sein.

2

Ich habe sowohl MSTest als auch NUnit (die erste mehr als die letztere) verwendet, und ich kann nicht sagen, dass ich große Unterschiede zwischen den beiden bezüglich der Geschwindigkeit bemerkt habe (versteh mich nicht falsch, der Unterschied könnte sein da habe ich es einfach nicht bemerkt).

Der Grund, warum ich MSTest gewählt habe, ist die Integration in Visual Studio, da es die Erstellung von MSTest erheblich vereinfacht. Außerdem hatte ich nach einigen Problemen einige Tests, weil die NUnit-Tests in einer anderen Thread-Appliance als MSTests ausgeführt wurden.

+1

Wenn Sie NUnit verwenden und die VS-Integration verwenden möchten, können Sie Test Runner-Plugins (wie TestDriven.NET und Resharper) verwenden, um Komponententests innerhalb von VS auszuführen. Es ist nicht genau das gleiche wie der eingebaute Test-Runner, der nur mit MSTest funktioniert. Aber es könnte eine gute Lösung für einige sein. –

Verwandte Themen