Jaki jest najlepszy sposób na testowanie jednostkowe kodu celu C?


330

Jakie istnieją ramy do testowania jednostkowego kodu celu C? Chciałbym ramy, które ładnie integrują się z Apple Xcode.


Według mojej najlepszej wiedzy niektóre odpowiedzi tutaj są nieaktualne. Apple ma teraz XCTest, który pomaga rozwiązać ten problem. Myślę, że większość odpowiedzi wymaga aktualizacji.
Honey,

Odpowiedzi:


317

Xcode zawiera XCTest, który jest podobny do OCUnit , frameworka testowania jednostek Objective-C i ma pełną obsługę uruchamiania testów jednostkowych opartych na XCTest w ramach procesu budowania projektu. Obsługa testów jednostkowych Xcode została opisana w Omówieniu Xcode: Korzystanie z testów jednostkowych .

Wracając do Xcode 2 dni, napisałem serię postów na blogu o tym, jak wykonywać niektóre typowe zadania z testowaniem jednostek Xcode:

Pomimo używania OCUnit zamiast XCTest, koncepcje są w dużej mierze takie same.

Na koniec napisałem także kilka postów na temat pisania testów dla interfejsów użytkownika Cocoa; sposób, w jaki kakao jest zbudowane, sprawia, że ​​jest to stosunkowo proste, ponieważ w większości przypadków nie trzeba obracać pętli zdarzeń ani nic takiego.

Umożliwia to tworzenie testów opartych na testach nie tylko kodu na poziomie modelu, ale także kodu na poziomie kontrolera, a nawet kodu na poziomie widoku.


5
Peter Hosey wygłosił również dobrą prezentację na temat testowania jednostek kakaowych w Lake Forest w Kalifornii na spotkaniu Cocoaheads w grudniu. Oto wideo: vimeo.com/2725498
Grant Limberg,

1
Kiedy zacząłem prace nad iOS około rok temu, odkryłem, że OCUnit miał (dla mnie) poważną wadę - nie mogłem uruchomić go na symulatorze lub urządzeniu. Od tego czasu mogło się to zmienić - nie sprawdziłem, ale używam GHUnit tylko z tego powodu.
drekka

1
Czy są jakieś oficjalne filmy Apple Developer na ten temat? Przeszedłem przez WWDC 2011 i 2010, ale nie mogłem znaleźć ... dziwnego, ponieważ testy są ważne tak?
Robert,

4
Link do Przewodnika po testach jednostek Xcode
Steven Green

5
Xcode 5 ma teraz XCTest, czy nadal zawiera OCUnit? Czy zaktualizujesz swoją odpowiedź o informacje dla XCode 5.
BrightIntelDusk

50

Sprawdź GHUnit autorstwa Gabriel Handford:

„Celami GHUnit są:

Uruchamia testy jednostkowe w XCode, umożliwiając pełne wykorzystanie debugera XCode. Prosty graficzny interfejs użytkownika ułatwiający wizualizację testów. Pokaż ślady stosu. Być instalowalnym jako platforma (dla aplikacji Cocoa) z prostą (lub nie) docelową konfiguracją; lub łatwe do spakowania do projektu iPhone'a ”.


5
+1 dla GHUnit! Jestem nowy w rozwoju iPhone'a i mogę szczerze powiedzieć, że miałem GHUnit działający bez problemów (instrukcje są idealne) w porównaniu do absolutnego koszmaru OCUnit i łagodnej migreny GTM. GHUnit wygrywa za użyteczność i łatwość!
Tim Reddy,

3
Zwróć uwagę, że ta odpowiedź i towarzyszące jej komentarze zostały napisane jakiś czas temu. Xcode ma teraz znacznie lepszą obsługę testów opartych na OCUnit, co ułatwia konfigurowanie testów i uruchamianie ich w debuggerze.
Kristopher Johnson

1
Ten projekt został wycofany.
BigHeadCreations



12

Pamiętaj, że projekt Google Toolbox dla komputerów Mac (GTM) po prostu rozszerza / rozszerza platformę Apple SenTestingKit (która sama w sobie opiera się na OCUnit). Jak mówią na stronie projektu:

GTM ma kilka ulepszeń w stosunku do standardowego SenTestingKit, umożliwiając przeprowadzanie testów jednostek interfejsu użytkownika, automatycznych testów jednostek powiązań, śledzenia dzienników i testów jednostek na iPhonie, a także narzędzia do przeprowadzania statycznych i dynamicznych testów kodu.

Zwróć uwagę na następujący komentarz na temat testowania interfejsu użytkownika:

GTM ma szerokie wsparcie dla testów jednostek interfejsu użytkownika. Obsługuje testowanie obrazu i / lub stanu wewnętrznego prawie wszystkich standardowych obiektów interfejsu użytkownika Cocoa / UIKit i ułatwia rozszerzenie tej obsługi na własne obiekty interfejsu użytkownika.

Zobacz stronę „ Weryfikacja kodu i testy jednostkowe ”, aby uzyskać instrukcje na temat korzystania z niego.


12

Doszedłem do wniosku, że GHUnit to najbardziej zaawansowana platforma testowa dla Objective-C. Zrobiłem podsumowanie ram testowych na moim blogu. Jest najbardziej elastyczny pod względem wdrażania (natywny iPhone, symulator lub Mac OS) i zapewnia funkcje. Ponieważ jest oparty na GTM, dziedziczy wszystkie zalety GTM w stosunku do SenTestingKit, ale dodaje także znacznie więcej. Kolejną zaletą jest to, że jest utrzymywany bardzo aktywnie.

Podjęłam starania, aby zintegrować OCMock z GHUnit, działa świetnie! Możesz pobrać kod na github .


12

Zdaję sobie sprawę, że to stare pytanie, ale jeśli wolisz testowanie w stylu BDD (rspec, Jasmine itp.) Niż testowanie w stylu xUnit (Test :: Unit, JSUnit, JUnit itp.), Możesz rozważyć sprawdzenie Cedar . Cedar przenosi testy w stylu BDD do Objective-C, teraz, gdy język obsługuje zamykanie.

Z radością wykorzystujemy Cedar do naszych projektów iOS w Pivotal Labs i aktywnie pracujemy nad jego ulepszeniem. Wszelkie uwagi i sugestie są mile widziane na cedar-discuss@googlegroups.com


10

Poleciłbym również użyć narzędzi pokrycia, aby zobaczyć, która część kodu jest objęta testami jednostkowymi, a które nie. Za pomocą narzędzia GCOV można wygenerować podstawowe pokrycie linii i kodu oddziału . Jeśli chcesz generować ładne raporty pokrycia HTML, istnieją LCOV i ZCOV, które właśnie to robią.









3

Specta to nowoczesna platforma TDD (Test Driven Development) / BDD (Behaviour Driven Development), która działa na XCTest. Obsługuje testy jednostkowe dla projektów iOS i Mac OS X.


0

Mam nadzieję, że możesz użyć „SenTestKit”, z którego możesz przetestować każdą metodę.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.