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.

Kim
źródło
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.

Chris Hanson
źródło
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 ”.

Paul Robinson
źródło
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.

Clint Harris
źródło
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 .

Johannes Rudolph
źródło
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 [email protected]

Adam Milligan
źródło
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ą.

Nikita Zhuk
źródło
7

Wsparcie testów jednostkowych w pakiecie xcode (dla jego prostej konfiguracji) w połączeniu z ocrunner (dla niektórych autotestów / dobroci Growl) jest obecnie moją ulubioną konfiguracją testów jednostkowych Obj-C.

Steph Thirion
źródło
7

Sen: te (twórca środowiska testowego dołączonego do Xcode) wyjaśnia, jak używać OCUnit z projektem iPhone'a: simple-iphone-ipad-unit-test .

nst
źródło
4

Używam SimpleUnitTest współpracuje z bibliotekami iPhone i iPad.

http://cbess.blogspot.com/2010/05/simple-iphone-ipad-unit-test.html

Jest dostarczany z szablonem Xcode testu jednostkowego, aby łatwo dodać klasę testu jednostkowego. Zawija GTM.

Możesz dosłownie upuścić go do aktywnego projektu i rozpocząć dodawanie testów jednostkowych w ciągu 3 minut (lub krócej).

C. Bess
źródło
Eee… czy to ma się nie udać zaraz po uruchomieniu?
quantumpotato,
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.

dbainbridge
źródło
0

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

Karthik
źródło