Was ist der beste Weg, um Objective-C-Code zu testen?

330

Welche Frameworks gibt es für Unit-Test-Objective-C-Code? Ich möchte ein Framework, das sich gut in Apple Xcode integrieren lässt.

Kim
quelle
Nach meinem besten Wissen sind einige Antworten hier veraltet. Apple hat jetzt XCTest, mit dem Sie dieses Problem beheben können. Ich denke, die meisten Antworten müssen aktualisiert werden.
Honey

Antworten:

317

Xcode enthält XCTest, das OCUnit , einem Objective-C-Framework für Komponententests , ähnelt und die vollständige Ausführung von XCTest-basierten Komponententests als Teil des Erstellungsprozesses Ihres Projekts unterstützt. Die Unterstützung von Xcode-Komponententests wird in der Xcode-Übersicht: Verwenden von Komponententests beschrieben .

In den 2 Tagen von Xcode habe ich eine Reihe von Weblog-Posts geschrieben, in denen erläutert wird, wie einige allgemeine Aufgaben beim Testen von Xcode-Einheiten ausgeführt werden:

Trotz der Verwendung von OCUnit anstelle von XCTest sind die Konzepte weitgehend identisch.

Schließlich schrieb ich auch einige Beiträge darüber, wie man Tests für Cocoa-Benutzeroberflächen schreibt. Die Art und Weise, wie Cocoa strukturiert ist, macht es relativ einfach, da Sie in den meisten Fällen keine Ereignisschleife oder ähnliches drehen müssen.

Auf diese Weise können Sie nicht nur Ihren Code auf Modellebene, sondern auch Ihren Code auf Controller- und sogar Ansichtsebene testgetrieben entwickeln.

Chris Hanson
quelle
5
Peter Hosey hielt auch eine gute Präsentation über Kakao-Unit-Tests im Cocoaheads-Treffen in Lake Forest, CA, im Dezember. Hier ist ein Video davon: vimeo.com/2725498
Grant Limberg
1
Als ich vor ungefähr einem Jahr mit iOS anfing, stellte ich fest, dass OCUnit (für mich) einen schwerwiegenden Nachteil hatte - ich konnte es nicht auf dem Simulator oder Gerät ausführen. Möglicherweise hat sich das seitdem geändert - ich habe es nicht überprüft, aber ich habe GHUnit einfach aus diesem Grund verwendet.
Drekka
1
Gibt es offizielle Apple Developer-Videos zu diesem Thema? Ich habe die WWDC 2011 und 2010 durchlaufen, konnte aber keine ... seltsamen finden, da das Testen wichtig ist, ja?
Robert
4
Der Link zum Xcode Unit Testing Guide
Steven Green vom
5
Xcode 5 hat jetzt XCTest enthält es noch OCUnit? Aktualisieren Sie Ihre Antwort mit Informationen für XCode 5.
BrightIntelDusk
50

Schauen Sie sich GHUnit von Gabriel Handford an:

"Die Ziele von GHUnit sind:

Führt Unit-Tests in XCode aus, sodass Sie den XCode-Debugger vollständig nutzen können. Eine einfache Benutzeroberfläche zur Visualisierung Ihrer Tests. Stapelspuren anzeigen. Als Framework (für Cocoa-Apps) mit einer einfachen (oder nicht) Zieleinrichtung installierbar sein; oder einfach in Ihr iPhone-Projekt zu packen. "

Paul Robinson
quelle
5
+1 für GHUnit! Ich bin neu in der iPhone-Entwicklung und kann ehrlich sagen, dass ich GHUnit im Vergleich zum absoluten Albtraum von OCUnit und der milden Migräne von GTM ohne viel Aufhebens zum Laufen gebracht habe (Anweisungen sind perfekt). GHUnit gewinnt für Benutzerfreundlichkeit und Benutzerfreundlichkeit!
Tim Reddy
3
Beachten Sie, dass diese Antwort und die dazugehörigen Kommentare vor einiger Zeit geschrieben wurden. Xcode bietet jetzt eine viel bessere Unterstützung für OCUnit-basierte Tests, sodass Tests einfach eingerichtet und im Debugger ausgeführt werden können.
Kristopher Johnson
1
Dieses Projekt ist inzwischen veraltet.
BigHeadCreations
18

Ich habe angefangen, das Google Toolbox-Testgerät für das iPhone zu verwenden, und es funktioniert hervorragend für mich.

Google-Toolbox-für-Mac

Ryan Townshend
quelle
12

Beachten Sie, dass das Google Toolbox für Mac (GTM) -Projekt lediglich das SenTestingKit-Framework von Apple erweitert / erweitert (das selbst auf OCUnit basiert). Wie es auf der Projektseite heißt:

GTM verfügt über mehrere Verbesserungen des Standard-SenTestingKit, mit denen Sie UI-Unit-Tests, automatisierte Binding-Unit-Tests, Protokollverfolgung und Unit-Tests auf dem iPhone sowie Tools zum statischen und dynamischen Testen Ihres Codes durchführen können.

Beachten Sie den folgenden Kommentar zum Testen der Benutzeroberfläche:

GTM bietet umfassende Unterstützung für Unit-Tests der Benutzeroberfläche. Es unterstützt das Testen des Imaging- und / oder internen Status fast aller Standardobjekte der Cocoa / UIKit-Benutzeroberfläche und erleichtert Ihnen die Erweiterung dieser Unterstützung auf Ihre eigenen Benutzeroberflächenobjekte.

Anweisungen zur Verwendung finden Sie auf der Seite " Codeüberprüfung und Komponententests ".

Clint Harris
quelle
12

Ich bin zu dem Schluss gekommen, dass GHUnit das fortschrittlichste Testframework für Objective-C ist. Ich habe in meinem Blog eine Zusammenfassung der Test-Frameworks erstellt. Es ist am flexibelsten in Bezug auf Bereitstellung (iPhone, Simulator oder Mac OS Native) und Assert-Funktionen. Da es auf GTM basiert, erbt es alle Vorteile von GTM gegenüber SenTestingKit, fügt aber noch viel mehr hinzu. Ein weiterer Bonus ist, dass es sehr aktiv gepflegt wird.

Ich habe mich bemüht, OCMock in GHUnit zu integrieren , es funktioniert großartig!. Sie können den Code auf Github erhalten .

Johannes Rudolph
quelle
12

Mir ist klar, dass dies eine alte Frage ist, aber wenn Sie Tests im BDD-Stil (rspec, Jasmine usw.) gegenüber Tests im xUnit-Stil (Test :: Unit, JSUnit, JUnit usw.) bevorzugen, sollten Sie Cedar ausprobieren . Cedar bringt Tests im BDD-Stil zu Objective-C, da die Sprache jetzt Schließungen unterstützt.

Wir verwenden Cedar gerne für unsere iOS-Projekte bei Pivotal Labs und arbeiten aktiv daran, es zu verbessern. Feedback oder Vorschläge sind unter [email protected] willkommen

Adam Milligan
quelle
10

Ich würde auch empfehlen, Coverage-Tools zu verwenden, um festzustellen, welcher Teil des Codes mit Unit-Tests abgedeckt ist und welcher nicht. Mit dem GCOV- Tool kann eine grundlegende Abdeckung von Leitungs- und Zweigcodes generiert werden . Wenn Sie nette HTML-Berichterstattungsberichte erstellen möchten, gibt es LCOV und ZCOV , die genau das tun.

Nikita Zhuk
quelle
7

Sen: te (der Entwickler des in Xcode enthaltenen Testframeworks) erklärt, wie OCUnit mit einem iPhone-Projekt verwendet wird: simple-iphone-ipad-unit-test .

nst
quelle
5

Ich würde vorschlagen, sich mit Kiwi zu befassen, einem Open-Source-BDD-Testframework für iOS: Kiwi

Schauen Sie sich das WIKI des Projekts an, um Daniel Steinbergs Buch "Test Driving iOS Development with Kiwi" zu testen oder zu erhalten

Krzysztof Grzywacz
quelle
Kiwi unterstützt auch OS X, siehe github.com/allending/Kiwi/wiki/Up-and-Running-with-Kiwi-for-Mac
dbainbridge
4

Ich benutze SimpleUnitTest funktioniert mit iPhone und iPad Bibliotheken.

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

Es wird mit einer Unit-Test-Xcode-Vorlage geliefert, mit der Sie problemlos eine Unit-Test-Klasse hinzufügen können. Wraps GTM.

Sie können es buchstäblich in ein aktives Projekt einfügen und innerhalb von 3 Minuten (oder weniger) mit dem Hinzufügen von Komponententests beginnen.

C. Bess
quelle
Ähm ... soll es scheitern, sobald Sie es ausführen?
Quantumpotato
3

Specta ist ein modernes TDD- Framework (Test Driven Development) / BDD-Framework (Behavior Driven Development), das auf XCTest basiert. Es unterstützt Unit-Tests für iOS- und Mac OS X-Projekte.

dbainbridge
quelle
0

Ich hoffe, Sie können 'SenTestKit' verwenden, mit dem Sie jede einzelne Methode testen können.

Karthik
quelle