2009-10-08 11 views
9

PYTANIE - Jeśli uruchamiam aplikację Windows Forms w języku C# przy użyciu programu Visual Studio 2008, z której platformy testowania jednostkowego powinienem korzystać?Którą strukturę testów jednostkowych powinienem zacząć dla C# w Visual Studio 2008? (Aplikacja Windows Forms)

Wygląda na to, że w VS2008 jest jedna kompilacja? A może powinienem zajrzeć do czegoś takiego jak NUnit? A może NUnit jest używany w VS2008 pod maską? Co jest najbardziej popularne.

Byłoby dobrze mieć coś, co pozwala na: (a) drwiących/króćce i (b) zdolność do dochodzenia wyjątki

dzięki

Odpowiedz

5

Jeśli to tylko prosta aplikacja, framework MSTest wbudowany w VS2008 powinien zaznaczyć wszystkie pola. To nie jest to samo, co NUnit, chociaż wiele osób (omyłkowo) odnosi się do niego tak, jakby były tym samym.

Nigdy nie używałem tego do szyderstwa, więc może ktoś inny może to rozwinąć. Generuje osobny projekt w swoim rozwiązaniu, który służy wyłącznie do testowania. This is a good explanation of how to use it.

alt text

Edit: Robi się trochę więcej kopanie, natknąłem this comparison z MSTest i NUnit.

Wady NUnit ramowa:

  • Montaż NUnit jest w osobnym MSI.
  • Bez integracji z Visual Studio.
  • Wymaga ręcznego pisania przypadków testowych.
  • Bez automatycznego generowania kodu.
  • Wymaga otwarcia oddzielnego okna (konsola NUnit lub GUI) do wykonywania przypadków testowych.
  • Zamawianie realizacji przypadków testowych jest niedostępne.
  • Brak wbudowanej funkcji do debugowania przypadków testowych.
  • Brak wbudowanej funkcji do włączania/wyłączania przypadków testowych.
  • Nie Wbudowana funkcja dać dodatkowe informacje przypadków testowych, takich jak ślad stosu, Trace Information itp
  • nr
  • wbudowanej funkcji sortowania przypadków testowych na podstawie nazwy komputera klasy nazwę i typ hosta itp

To z artykułu porównawczego, z którym łączyłem.

Nigdy nie korzystałem z NUnit, tylko MSTest dla C# i JUnit dla Javy, więc jestem nieco stronniczy w tym względzie. MSTest zawsze działał dla mnie naprawdę dobrze dla WinForms, z funkcjami, takimi jak możliwość samodzielnego uruchamiania testów, pokazywania naprawdę szczegółowych raportów (z indywidualnymi dziennikami śledzenia) i autogenerowania całego kodu testowego i wykonywania wszystkich tych rzeczy, które powodują VS2008 taki genialny IDE. Z tego powodu NUnit działa dobrze dla innych i mają swoje powody, dla których to lubią.

Jeśli nie masz szczególnego powodu, aby zastosować podejście NUnit/Testdriven.NET, tak jak potrzebujesz określonej funkcji, lub po prostu wolisz taki sposób konfigurowania testów i próby zintegrowania go z powrotem w VS, wtedy nie robię tego. Nie widzisz żadnego powodu, aby po prostu użyć MSTest, który działa od razu po wyjęciu z pudełka.

+1

Wydaje się niesprawiedliwe, gdy wiele osób korzysta z TestDriven.NET do napędu NUnit. To zapewnia doskonałą integrację i usuwa większość wad, o których wspomniałeś. Atrybut NUnit [Ignore] wyłącza metody [Test] lub klasy [TestFixture]. Również, IMHO zamawianie przypadków testowych jest nieco śmierdzące :) – si618

+4

ouch. 600 znaków nie wystarczy. 1. To dobrze. Mogę uruchomić testy na dowolnej maszynie (build/QA) bez konieczności instalowania VSTS. 2. Jeśli chcesz kliknąć prawym przyciskiem i uruchomić testy, pobierz dodatki Resharper/TestDriven.Net. Zobacz także SO q # 196740. # 3,4,6,10 - nie ma sensu. Wierzę, że programiści znają ich kod lepiej niż VS. Wynika z tego, że mogą lepiej określić, jakie testy pisać. Ale potem jestem zainfekowany testem (czytaj zelot TDD). Przypadki testowe nie powinny być zależne od zamówienia - nie jest więc jasne, dlaczego jest to niekorzystne. – Gishu

+2

Contd ... Debugowanie przypadków testowych może być wykonane (dodaj nunit jako zewnętrzny exe do debugowania dla twojego testowego dll); chociaż to oznacza, że ​​nie znasz już swojego kodu. Sortowanie przypadków testowych - znowu nie wiesz, dlaczego tego potrzebujesz. Ale możesz pogrupować swoje testy w kategorie, takie jak [Kategoria ("Powolne testy")], a następnie włączyć lub wykluczyć je z testów. Masz również widok pola wyboru, w którym możesz ręcznie zaznaczyć testy, które chcesz uruchomić. Wreszcie 9. stacktrace - nunit robi to w pierwszej zakładce. Struktura testów jednostkowych byłaby trochę ułomna, gdyby nie wskazywała na dokładną lokalizację, w której test się nie powiódł! – Gishu

2

powiedziałbym, dla uproszczenia, start z jeden wbudowany w wizualne studio 2008. NUnit jest fantastyczny i używam go dużo, więc prawdopodobnie możesz przejść do NUnit, gdy już będziesz zadowolony z pisania testów jednostkowych.

+0

Czy testy jednostkowe VS2008 pozwalają stwierdzić, że powinien wystąpić wyjątek? nie mogę tego nawet zobaczyć? – Greg

+2

Tak, mimo że robisz to z atrybutem ([ExpectedAssertion()] Wierzę) – Steve

8

Polecam używanie NUnit dla twojej struktury testowej. Jest bardzo lekki i łatwy w transporcie, jeśli chcesz go zainstalować na serwerze kompilacji. Tak nie jest w przypadku MSTest. Jeśli chodzi o szydercze/izolacyjne frameworki, Rhino Mocks ma największą bazę użytkowników i najprawdopodobniej znajdziesz najszybsze odpowiedzi na pytania z Rhino Mocks.

+1

Największą wadą MSTest jest to, że kiedy zaczynasz tę drogę, trudno jest zmienić zdanie. NUnit jest nieco łatwiejszy do konwersji na MSTest. WYPRÓBUJ je obie. –

+2

NUnit działa również na Mono – joemoe

5

Zaczęliśmy od MSTest. Ma zaletę, która jest (delikatnie) trudna do odtworzenia w NUnit. Umożliwia dostęp do prywatnych członków klasy. Jest to nieocenione przy sprawdzaniu stanu. Na przykład powiedz, że mam funkcję, która umieszcza wpisy w słowniku, który nie jest odsłonięty. Rozumiem, że przy NUnit trzeba użyć odbicia, aby dostać się do słownika lub dodać pochlebcę wyłącznie w celu testowania. Tutaj możesz po prostu sprawdzić słownik. Bardzo łatwe i bardzo czyste. Pozwala również na testowanie prywatnych funkcji, które kocham (wiem, że niektórzy ludzie w to nie wierzą). Chociaż nie kocham MSTest, funkcja ta znacznie ułatwia testowanie.

Integracja z VS również jest przyjemna.

+0

W jaki sposób MSTest osiąga "dostęp do prywatnych członków", Steve, czy wiesz? po prostu interesowało mnie, dlaczego MSTestowi łatwo byłoby to zapewnić, ale nie faceci NUnit – Greg

+1

. Zrozumiałem, że faceci z rodu nie wierzą w to. W MSTest wystarczy kliknąć prawym przyciskiem myszy w klasie, którą chcesz przetestować, i wybrać "Add Class Accessor". Następnie uzyskujesz dostęp do klasy Foo jako Foo_Accessor w swoim teście. – Steve

+0

Moja grupa jest stosunkowo nowa w testowaniu jednostek i było wiele rzeczy, które podobały nam się w NUnit, ale rzeczy prywatne były łamaczami kontraktów. – Steve

3

Użyj MSTest. Jest wbudowany w VS2008 i ma wsparcie w IDE do tworzenia funkcji testowych. Jeśli i kiedy "przerośniesz" MSTest, powinieneś spojrzeć na NUnit lub bardziej nowoczesny xUnit. Możesz spodziewać się wyjątków w MSTest, dekorując je atrybutem ExpectedException.

[Test] 
[ExpectedException(typeof(ArgumentNullException))] 
public void Should_throw_ArgumentNullException_when_the_Order_is_null() 
{ 
    OrderProcessor processor = new OrderProcessor(); 
    processor.ProcessOrder(null); 
} 

Szalunki są niezależne od wyboru ram testowych. Najczęściej wybierane frameworki to: Moq i Rhino Mocks.

+1

Można to zrobić również za pomocą nUnit. –

+1

Na pewno. Możesz także uruchomić NUnit z Visual Studio, jeśli masz resharper. –

+0

MSTest nie używa atrybutu [Test]. Jest on używany w NUnit i MbUnit, co sprawia, że ​​te dwie wymienne, a także premia za nie używanie MSTest, jesteś silniej związany z frameworkiem. –

1

Nie wspominając, jeśli miały być test-jazdy kod ..

  • Go z NUnit jeśli nie jesteś zaznajomiony z którymkolwiek z ram xUnit. Najmniejsza krzywa uczenia się. Jest już od dłuższego czasu. Charlie Poole jest aktywny na NUnit (open source) i ma dobrą historię dobrych aktualizacji.
  • VS2008 ma wbudowane urządzenie MSTest. To nie to samo co NUnit. Nigdy nie miałem powodu, aby przejść z NUnit. Twierdzę, że NUnit ma zdecydowanie największą bazę użytkowników.
  • NUnit ma coś w pakiecie dla Mocks, ale zdecydowanie wskażę na Moq. Rhino Mocks jest od pewnego czasu topowym modelem, ale Moq ma łatwiejszą krzywą uczenia się (z dokumentacji online), chociaż nie zawsze może obsłużyć scenariusze skrajne ... jeszcze IMHO
  • Potwierdzanie wyjątków jest obsługiwane w obu.

Polecam kupić cienką książkę 'Pragmatic Unit Testing in C# with NUnit' i przejrzeć ją przynajmniej raz.

Na linii NUnit v MSTest nie nadaję się do komentowania. 0 latanie z MSTest.

  • Chociaż słyszę, że VS2010 będzie oferować bibeloty, takie jak automatyczne raporty dotyczące zasięgu kodu.tylko, jeśli masz testy MSTest. Ale takie argumenty, które słyszę w MSTestach, należą do ... więcej na temat wsparcia i integracji IDE. Istnieją świetne dodatki, takie jak Resharper i TestDriven, które mogą je załatać, ale za jakąś cenę.
  • Także IMHO, oprzyrządowanie do testowania jednostek firmy Microsoft ma subtelny sposób poprowadzenia Cię ciemną ścieżką. więc uważaj. Zobacz mój komentarz do Dale w tym wątku.
Powiązane problemy