Jakie są najlepsze ramy testów jednostkowych dla platformy .NET i dlaczego? [Zamknięte]

26

Wydaje mi się, że wszyscy używają NUnit, nawet nie rozważając innych opcji. Myślę, że dzieje się tak, ponieważ:

  • Wszyscy już go znają, więc nie będą musieli się uczyć nowego API.
  • Jest już skonfigurowany z serwerem ciągłej integracji do pracy z NUnit.

Czy się mylę?

Ostatnio zdecydowałem się użyć xUnit do jednego z moich projektów i uwielbiam to! Ma to dla mnie o wiele więcej sensu i koncepcyjnie wydaje się wyraźnym krokiem naprzód od NUnit.

Chciałbym usłyszeć opinie na temat tego, który framework jest rzeczywiście najlepszy - nie biorąc pod uwagę konieczności uczenia się go lub zmiany konfiguracji automatycznego testowania.

Nikt
źródło
6
Proszę zdefiniować najlepiej. Najtańszy? najłatwiej kodować? najmniej wierszy kodu na test? stackoverflow.com/questions/680298/...
Amir Rezaei
Przepraszam, miałem na myśli najmocniejszy, stabilny i intuicyjny, cokolwiek. Pytam o opinie i powody, dla których . Pozostawiłem „najlepsze” wyobraźni osoby odpowiadającej, ponieważ chciałbym również zobaczyć, które z tych aspektów są ważne dla ludzi.
Nikt
2
Jeśli możesz przeredagować swoje pytanie, może być OK, w przeciwnym razie jest to tylko „lista X” pytań, które nie są konstruktywne. Zobacz sześć wskazówek konstruktywnych subiektywnych pytań
ChrisF
2
„najlepsza” jest głupią sprawą - ponieważ bardzo rzadko jest jedna najlepsza, częściowo dlatego, że zależy od kontekstu, a częściowo dlatego, że jest do pewnego stopnia nieuchronnie subiektywna.
Murph
10
Murph. Po pierwsze, ta strona służy do subiektywnych pytań. Po drugie, proszę o opinie, więc chciałbym zobaczyć interpretację „najlepszego” przez innych. I nie nazywaj mnie głupcem.
Nikt

Odpowiedzi:

15

MSTest

Osobiście używam MSTest. NUnit jest naprawdę fajny, ale w VS2010 MSTest jest już w pełni zintegrowany z IDE i istnieją dla niego pełne szablony projektów. W przypadku platformy .NET, jeśli korzystasz z 2010 r., Myślę, że MSTest jest właściwą drogą (MSTest w VS2008 nie wydaje mi się, że jest na równi) po prostu w zakresie pokrycia kodu, programu uruchamiającego testy i innych dostępnych narzędzi po wyjęciu z pudełka. (Jeśli używasz CodeRush lub R #, wtedy mają naprawdę świetne narzędzia testujące / narzędzia do innych środowisk testowych)

Edycja: Od tego czasu przeszedłem do XUnit. :RE

Ryan Hayes
źródło
Głosowałem za zarówno MbUnit / Galio, jak i tą odpowiedzią. MbUnit / Galio jest po prostu lepszy, ale ich ręce są powiązane, jeśli chodzi o uruchamianie testów MsTest, ponieważ niektóre krytyczne klasy w tej bibliotece .Net są ostateczne i nie można ich rozszerzać. Jeśli jednak musisz wykonać automatyzację GUI, wówczas Coded UI i cuite.codeplex.com/documentation działają na MsTest, więc MUSISZ z nich skorzystać.
Job
2
Problem z MSTest polega na tym, że natywnie nie obsługuje testowania wiersza poleceń, może to być problem, gdy chcesz uruchamiać jednostki przez CI.
CmdrTallen,
1
Nunit jest teraz w pełni zintegrowany z VS, prawda?
BKSpurgeon
Tak jest. Biorąc pod uwagę, że ma to teraz około 6 lat, osobiście przeszedłem do NUnit, a następnie do XUnit. Zarówno (jak i inne) mają pakiety nuget, które służą jako adaptery do podświetlenia tej samej funkcjonalności VS co MSTest. Szczerze mówiąc, MSTest jest prawdopodobnie na dole listy w tym momencie. Głosowałbym na XUnit lub NUnit. obecnie oba są solidne, zadbane i nowoczesne.
Ryan Hayes
14

Zacząłem używać Gallio / MbUnit kilka lat temu. A funkcje i klejnoty, które zapewnia, są tak potężne, że nigdy nie żałowałem mojego wyboru. W rzeczywistości jestem teraz częścią zespołu programistów projektu Gallio OSS; dzięki czemu mogę przyczynić się do uczynienia go jeszcze bardziej niesamowitym.

  • MbUnit ma wiele zaawansowanych funkcji, które po prostu ułatwiają moje życie programistów (weryfikatory kontraktów, fabryki testowe, strukturalny moduł porównujący równość, testy kombinatoryczne, struktura generowania danych, różnicowanie tekstu, asercje xml, punkty rozszerzenia itp.)
  • Gallio zapewnia spójną platformę do uruchamiania wszystkich moich testów z ładnym narzędziem do raportowania. Lubię też to, że mogę zintegrować testy z innych projektów OSS, które nie używają MbUnit i po prostu je uruchomić. Bezproblemowa integracja z wieloma narzędziami innych firm jest również wygodna (R #, PoSh, dotCover itp.). Rozbudowa infrastruktury jest niesamowita (na przykład właśnie skończyłem pisać adapter testowy dla natywnego niezarządzanego środowiska testowego C ++ Wkrótce będzie to część przyszłej wersji)

Wiki jest na pewno dobry punkt wyjścia do odkrywania Gallio i MbUnit v3. Parapet brakuje niektórych rozdziałów, ale jest już cicho użyteczny.

Yann Trevin
źródło
Strukturalny moduł porównujący równość i generowanie danych brzmią świetnie. Czy MbUnit może przeprowadzać testy oparte na danych - tj. Czytać pliki csv / xsd i używać ich jako argumentów metody testowej? To dla mnie jedna z głównych atrakcji Xunit.
Nikt
Pewnie. ASAIK MbUnit był pierwszą platformą testową dla platformy .NET, która wprowadziła testy oparte na danych. Może wiązać parametry testowe z wewnętrznymi ([Wiersz], [Kolumna] itd.) I zewnętrznymi ([CsvData], [XmlData] itp.) Źródłami danych. Więcej szczegółów tutaj: gallio.org/wiki/doku.php?id=mbunit:data-driven_testing
Yann Trevin
Czy naprawili problemy z wydajnością występujące w Gallio i studiu wizualnym? Był dla nas zabójcą.
Wyatt Barnett
Korzystałem z MbUnit, kiedy pracowałem dla małej firmy i było świetnie! Później użyłem MsTest, ponieważ musiałem, i zadziałało dobrze. Nadal wolę pisać wyraźny kod niż konfigurować ustawienia projektu. Wsparcie korporacyjne pomaga jednak MSTest. Niezależnie od tego, czy projekt jest brzydki, czy piękny, wiesz, że wszystko, co wyjdzie z MSFT, zostanie dobrze przetestowane.
Job
@YannTrevin Jaki jest status Gallio / MbUnit? Przejrzałem repozytorium Google Code i wydaje się, że nie ma żadnych ostatnich zmian. Czy rozwój odbywa się gdzie indziej, czy też projekt jest opóźniony?
Wesley Wiser
9

Wybór jednego i użycie go jest być może najważniejszym krokiem tutaj.

Osobiście wybrałbym NUnit z kilku powodów. Przede wszystkim wsparcie narzędzi. Dostępny jest bezpłatny dodatek do programu Visual Studio 2010 i obsługują go wszystkie główne wtyczki innych firm. Obsługuje go każdy system kompilacji, narzędzie do testowania i serwer CI. W wielu przypadkach bez wtyczki. Na poziomie kodu może obsłużyć prawie każdy scenariusz w tym momencie - testy oparte na danych, dziedziczenie, abstrakcyjne klasy testowe, ogólne klasy testowe, konfiguracja, zburzenie itp. W pewnym stopniu mamy xUnit, ponieważ NUnit jest zbyt bogaty w funkcje i potężny.

Poza NUnit, myślę, że możesz zrobić całkiem niezły argument dla MBUnit + Gallio, jak wspomniał Yann - jest to bardzo solidny framework. Tym, którego należy unikać, jeśli to w ogóle możliwe, byłby MSTest, który ma kilka fatalnych wad IMHO. Wady są niektórymi ograniczeniami na klasach testowych, takimi jak brak dziedziczenia i zależność od profesjonalnych lub lepszych SKU studia wizualnego. W tym wymaganie instalacji programu Visual Studio na serwerze kompilacji w celu uruchomienia testów.

Wyatt Barnett
źródło
0

Jednym z powodów jest to, że NUNIT stał się bardziej standardem branżowym niż xUnit. Ale osobiście uwielbiam Xunit.

Cheung
źródło