2010-09-27 10 views
8

Roy Osherove, autor The Art Of Unit Testing ma commented na blogu, że z wielu rzeczy NUnit podobno nie lepiej, przy czym znacznie szybciej jest jednym z nich.Jak dużo szybciej jest NUnit porównaniu do MSTest

Moje pytanie brzmi: jak dużo szybciej, jeśli w ogóle? Czy mówimy o rzędzie wielkości? 10%? 50%?

Pytam o to, ponieważ na chwilę obecną nie mogę porównać obu. Próbuję skonfigurować mój projekt testowy na dual-mode, aby móc przełączać się między nimi. Niestety, mam problem z integracją NUnit z najnowszą wersją Microsoft Moles, a także z NUnit is conflicting with a third party library (appears log4net related).

Do tej pory MSTest wydaje się o wiele łatwiejszy w użyciu w Visual Studio 2008. Wszystkie problemy z wersją i kompatybilnością z NUnit (przynajmniej dla mnie) skłania mnie do wyboru MSTest jako ramy dla projektu (choć mogę zachowaj opcję trybu podwójnego). Kolejny plus dla MSTest, że mogę nadal korzystać z większości NUnit twierdzi z:

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

Ale .... Jeśli prędkość jest naprawdę dużo szybciej w NUnit, to wolałbym, aby go używać, mimo punktach bólowych .

Wreszcie, czy nastąpiła jakaś poprawa prędkości w VS2010 dla MSTest?

Odpowiedz

6

Cóż, poświęciłem czas na usunięcie Microsoft Moles i kodu produkcyjnego, który zajmował się problemami związanymi z log4net, tak żebym mógł porównać te dwa. Następnie przeprowadziłem testy zarówno w MSTest 2008, jak i NUnit 2.5.2.

Okazało się, że MSTest lepiej raportuje czas trwania każdego pojedynczego testu. Jeśli test będzie wystarczająco szybki w NUnit, zostanie zarejestrowany jako 0 sekund zarówno w pliku TestResults.xml, jak iw interfejsie GUI po kliknięciu właściwości testu. Mimo to próbowałem porównać sumę wszystkich prędkości testowych, aw niektórych przypadkach NUnit jest szybszy, w innych przypadkach MSTest jest szybszy. Kiedy jeden jest szybszy od drugiego, jest o około 30%.

Teraz, gdzie NUnit zdecydowanie wydaje się szybszy, czas oczekiwania przed uruchomieniem testów jednostkowych. Kiedy podłączam GUI (lub konsolę) do Debuggera VS i uruchamiam projekt testowy, uruchomienie NUnit i załadowanie trwa około 3-6 sekund, zanim testy zostaną wykonane. Z MSTest zajmuje to 15-20 sekund. W przypadku MSTest nie ma znaczenia, czy jest tylko 1 test lub 26, czas ładowania wydaje się być taki sam. Jeśli chodzi o to, jak te czasy oczekiwania skala się w miarę wzrostu projektu testowego, powiedzmy w tysiącach testów jednostkowych, nie mogę wypowiedzieć się na temat różnicy, choć byłbym bardzo zainteresowany poznaniem.

Wydaje się również, że w trakcie testów MSTest występuje niewielkie opóźnienie, być może w celu zaktualizowania panelu wyników. Podejrzewam, że kiedy ludzie mówią, że NUnit działa znacznie szybciej niż MSTest, dzieje się tak z powodu opóźnień ładowania i aktualizacji, ale faktyczny czas wykonania testu wydaje się bardzo podobny.

2

Użyłem zarówno MSTest, jak i NUnit (pierwszy więcej niż drugi), i nie mogę powiedzieć, że zauważyłem duże różnice między nimi pod względem prędkości (nie zrozum mnie źle, różnica może być tam, po prostu tego nie zauważyłem).

Powodem, dla którego wybieram MSTest jest jego integracja z Visual Studio, ponieważ znacznie upraszcza. Dodatkowo, gdy miałem kilka problemów z kilkoma testami, ponieważ testy NUnit działały w innym wątku niż w MSTests.

+1

Jeśli używasz NUnit i ma integracja VS jest ważna, możesz użyć wtyczek test runner (takich jak TestDriven.NET i Resharper), aby uruchomić testy jednostkowe z poziomu VS. To nie jest dokładnie to samo, co wbudowany tester, który działa tylko z MSTest. Ale dla niektórych może być dobrym rozwiązaniem. –

Powiązane problemy