NUnit kontra xUnit

115

Jakie są różnice między NUnit i xUnit.net ? Jaki jest sens rozwijania dwóch z nich, a nie tylko jednego?

Czytałem, że xUnit jest rozwijany przez wynalazcę NUnit:

xUnit.net to narzędzie do testów jednostkowych dla platformy .NET Framework. Napisane przez oryginalnego wynalazcę NUnit

Z drugiej strony:

NUnit to platforma do testowania jednostek dla wszystkich języków .Net. Bieżąca wersja produkcyjna, wersja 2.6, jest siódmą główną wersją tego narzędzia do testowania jednostkowego opartego na xUnit

Więc gdzie jest prawda?

Rusłan
źródło
4
Jak zauważył @Joey - nie jest to zwykły duplikat połączonego pytania. W tym przypadku PO zasadniczo coś źle zrozumiał; mianowicie różnica między xUnit.net - narzędziem do testowania jednostkowego i x Unit - uogólnionym terminem na klasę frameworków do testów jednostkowych (nUnit, jUnit itp.). Głosowanie za ponownym otwarciem.
Rob Levine,

Odpowiedzi:

140

W chwili pisania tej odpowiedzi najnowsza wersja NUnit to 3.5, a xUnit.net to v2.1.

Oba frameworki są niesamowite i oba obsługują równoległe uruchamianie testów (choć w inny sposób). NUnit istnieje od 2002 roku, jest szeroko stosowany, dobrze udokumentowany i ma dużą społeczność, podczas gdy xUnit.net jest nowocześniejszy, bardziej zgodny z TDD, bardziej rozszerzalny, a także zyskuje na popularności w programowaniu .NET Core. Jest to również dobrze udokumentowane.

Oprócz tego główną różnicą, którą zauważyłem, jest sposób, w jaki xUnit.net uruchamia metody testowe. Tak więc w NUnit mamy klasę testową i zestaw metod testowych. NUnit tworzy nową instancję klasy testowej, a następnie uruchamia wszystkie metody testing z tej samej instancji. Natomiast xUnit.net tworzy nową instancję klasy testowej dla każdej z metod testowych. . Dlatego nie można używać pól lub właściwości do udostępniania danych między metodami testowymi, co jest złą praktyką, ponieważ nasze metody testowe byłyby od siebie zależne, co jest nie do przyjęcia w TDD. Więc jeśli używasz xunit.net, możesz być pewien, że twoje metody testowe są całkowicie odizolowane.

Jeśli jednak chcesz udostępnić niektóre dane w swoich metodach testowych, xUnit pozwoli ci to zrobić. Dlatego domyślnie wszystkie metody testowe są całkowicie izolowane, ale w określonych przypadkach można celowo przerwać tę izolację. Podoba mi się takie podejście, dlatego bardziej mi się podoba.

akazemis
źródło
5
Po więcej szczegółów sprawdź mój najnowszy post: codopia.wordpress.com/2017/02/20/…
akazemis
2
To, co piszesz o wykonywaniu równoległym, nie jest prawdą. Może to było w czasie twojego postu, ale teraz tak nie jest. Sprawdź to xunit.net/docs/running-tests-in-parallel . Mówi, że metody testowe w jednej klasie nigdy nie będą działać równolegle.
Gondil
Dzięki @Gondil, masz rację, nie będzie uruchamiać równolegle metod jednej klasy.
poprawiono
2
Nie jestem pewien, jak dowiedziałeś się, że xUnit jest „dobrze udokumentowany”, ponieważ najwyraźniej tak nie jest. Wszystkie informacje należy znaleźć w źródłach społeczności i pytaniach dotyczących przepływu stosów, a nie w dobrej dokumentacji, jak robi to NUnit. Po twojej odpowiedzi byłem naprawdę podekscytowany xUnit, ale doszedłem do wniosku, że NUnit wydaje się dobrze radzić sobie również w .NET Core.
CularBytes
1
@Loaderon Opublikowałem to około 4 lata temu i od tego czasu używam xunit do teraz. dokumentacja i społeczność są znacznie lepsze niż wcześniej, a teraz są bardziej dojrzałe. więc korzystaj z XUnit ze spokojem, nie będziesz musiał wracać do NUnit. :)
akazemis
34

Mylisz nazwę pojedynczego narzędzia ( xUnit.net ) z nazwą całej klasy frameworków do testów jednostkowych ( xUnit , x odnosi się do języka / środowiska, np. JUnit, NUnit, ...).

Joey
źródło
2
Szkoda, że ​​to się zamknęło, ponieważ nie jest to zwykły duplikat - masz rację - OP pomylił się między dwoma terminami, które są prawie takie same.
Rob Levine,
Nieznacznie zmieniłem tytuł, aby upewnić się, że nie będzie zamieszania.
Ruslan
1
Nie przeszedłem przez tytuł, ale raczej wyróżnione fragmenty cytatów w twoim pytaniu. Ale może cię źle zrozumiałem.
Joey
9

xUnit Plusy:

xUnit kieruje się nową koncepcją, unikając starych metod „SetUp” i „TearDown”. Zmusza nas to do używania IDisposable i konstruktora, tak jak powinniśmy robić jako programiści .NET. Również xUnit ma jasną koncepcję udostępniania kontekstu.

xUnit Wady:

Możliwość pobrania kontekstu testowego nie została jeszcze zaimplementowana.

TakinosaJi
źródło
1
Co to jest „kontekst testu” ? Czy zostało już wdrożone?
Peter Mortensen
kontekst testu dałby nam informacje o bieżącym teście (na przykład nazwę testu). Z tego co wiem, prawdopodobnie nie jest jeszcze zaimplementowany :(.
Shoter
8

Jedną z zalet xUnit jest to, że znajduje testy w różnych klasach; prowadzi je równolegle . Może to zaoszczędzić dużo czasu, jeśli masz wiele przypadków testowych.

Możesz oczywiście to wyłączyć lub kontrolować jego działanie (liczba wątków, wątki na klasę, testy na zespół itp.

Sprawdź to przykładowe rozwiązanie z dwoma projektami testowymi, jednym wykorzystującym xUnit, a drugim NUnit .

Możesz przeczytać więcej o testach równoległych w xUnit tutaj .

Rad
źródło
Czy xunit ma inne sposoby tworzenia równoległych testów w tej samej klasie?
Magesh