Chcę zacząć od obiektów w moich testach jednostkowych. Wygląda na to, że istnieje mnóstwo dobrych szyderczych ram.
- Czy różne ramy mają różnych docelowych odbiorców?
- Jakie czynniki należy wziąć pod uwagę, wybierając ramy odpowiednie dla mojej sytuacji?
Odpowiedzi:
Czy różne ramy mają różnych docelowych odbiorców?
Tak. Niektóre frameworki, takie jak Microsoft Moles , TypeMock Isolator i JustMock , pozwalają na kpowanie z wszystkiego. Te narzędzia próbne są na ogół lepsze dla programistów, którzy chcą ich używać w istniejącym starszym kodzie, ponieważ może nie być możliwe przeformułowanie takiego projektu na bardziej testowalny. *
Tradycyjnie, testowalne projekty oznaczają, że podstawa kodu musi swobodnie korzystać z interfejsów, klas abstrakcyjnych, metod wirtualnych, niezamkniętych klas itp. Dlatego tradycyjne frameworki takie jak Moq i RhinoMocks działają dobrze z kodem opracowanym przy użyciu Test Driven Development, Dependency Injection i inne takie pojęcia. Nawiasem mówiąc, zdecydowanie zaleciłbym użycie Dependency Injection, ponieważ zyskujesz znacznie więcej niż tylko testowalny kod, ale także łatwiejszy do utrzymania kod.
Jakie czynniki należy wziąć pod uwagę, wybierając ramy odpowiednie dla mojej sytuacji?
* Zobacz Efektywna praca ze starszym kodem , aby dowiedzieć się, jak powoli refaktoryzować kod bez testowania kodu, którego można używać z tradycyjnymi narzędziami testującymi (i kpiącymi).
źródło
Poradnik Moq ma przekrój w tle, filozofii i prawa kontrowersje na początku omawiającej ten w odniesieniu do kilku konkretnych narzędzi: TypeMock izolatora RhinoMocks i Min. Jest napisany, aby wyjaśnić Moq, więc jest oczywiście nieco wypaczony, ale uznałem, że jest to dla mnie bardzo pomocne, gdy próbuję zrozumieć niektóre różnice w kpinach.
Znalazłem również odpowiedzi na ten wątek SO w C # Mocking Frameworks . Większość odnosi się tylko do jednego z Mocking Framework, który użytkownik naprawdę uważa za użyteczny, ale istnieje odpowiedź od HaraldV , która omawia symulacje oparte na proxy i symulacje oparte na profilowaniu.
Udało mi się również znaleźć tabelę porównawczą online. Pamiętaj, że pochodzi z 2009 roku, więc nie jestem pewien, czy jest aktualny; jest co najmniej jeden komentarz stwierdzający, że informacje o TypeMock i wywołaniach zwrotnych są nieaktualne, ale wykres może być dobry do zgłaszania problemów do rozważenia, nawet jeśli będziesz musiał zrobić pracę nóg, aby zobaczyć, jaki jest obecny stan: RhinoMocks, Moq, NMock, i tabela porównawcza TypeMock
W Google Code jest projekt z przypadkami testowymi w wielu frameworkach, które ułatwiają porównywanie kodów: makiety-frameworki
źródło
W moim zespole wybraliśmy Microsoft Moles . Wygrywa znacząco na # 2, # 3 i # 4, chociaż jest mniej idiomatyczny niż większość alternatyw i jest na niskim poziomie na # 1.
źródło