Führen Logik-tests in Xcode 4 ohne starten Sie den simulator
Möchte ich laufen tests in Xcode 4 mit OCUnit ohne starten Sie den simulator. Bitte, versuchen Sie nicht und überzeugen Sie mich, ich mache unit-Tests falsch oder etwas ähnliches. Ich mag zu tun TDD die traditionelle Art und Weise: schreiben Sie die API für die Klasse in die tests, dann die Klasse die Prüfungen bestehen. Ich Schreibe eigene tests, die end-to-end, die in den simulator.
Wenn es keine Möglichkeit gibt, dies zu tun, dann bitte, kann mir jemand sagen, wie man die Testumgebung nicht instanziieren, die die ganze app? Meine app ist event-driven, und es sendet eine Reihe von Veranstaltungen durch, wenn es beginnt, die Sauerei mit meinen tests.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich benutze Xcode 4 built-in-Tests. App Instanziierung mag wie ein Schmerz, aber als ich schreiben über Xcode Unit-Tests: The Good, The Bad, the Ugly, es macht es möglich, tests schreiben, ohne Unterscheidung zwischen Logik-tests und Anwendungstests. Speziell, es lässt mich das schreiben von unit-tests für view-Controller.
Hier ist, was ich tun, um zu vermeiden, meine volle Start-Sequenz:
Bearbeiten Sie das Schema
runningTests
zuYES
Bearbeiten Sie Ihre app delegieren
Fügen Sie die folgenden
-application:didFinishLaunchingWithOptions:
sobald es Sinn macht:Tun das gleiche für
-applicationDidBecomeActive:
aber einfachreturn
.Update: ich habe, änderte sich mein Ansatz. Sehen Wie man sich Leicht Schalten, die Ihre App Delegate für die Prüfung.
In der letzten xcode version (5.0.2) Sie können dies auf sehr einfache Weise. Wählen Sie Ihre Test-target, Reiter "allgemein". Legen Sie "None" im Feld "Ziel". Dann Tippen Sie auf "Build-Phasen" - Registerkarte, und entfernen Ihre Haupt-Zielgruppe von "Target dependencies".
In Ihrer situation, ich bin angenommen, Sie haben einen separaten Logik-Tests und Anwendungstests Ziel (wenn nicht - müssen Sie). In Ihrem Schemata-Konfiguration legen Sie fest, welche Ziele sind gebaut für die 'Test' - Schema. Wenn Ihre Anwendung von tests nicht ausgeführt werden, wird der simulator nicht starten.
Ich vermute, dass Sie könnte versuchen zu laufen "Logik-tests' in ein 'Application-tests" Ziel (wie die, die standardmäßig erstellt von Xcode). Sehen Sie mehr über diesen Unterschied hier (und wie man ut up).
Es wurde darauf hingewiesen, die in einer früheren Antwort, die Logik-tests sind, das richtige zu tun für dieses Szenario. Ich hatte eine sehr harte Zeit in getting der Logik-tests arbeiten mit der XCode-Version 4.3.2 (4E2002). Blick auf Apples Beispiel-unit-test-Projekt hat mir geholfen, zu verstehen, wie dies zu tun mit einer klaren Trennung. In diesem Beispiel -, Logik-tests, test-Dateien aus der Bibliothek Ziel, nicht die Anwendung target. Das Modell wurde eingekapselt in eine Bibliothek, die war dann verbunden mit den wichtigsten Ziel-und Logik-tests Ziel. Die Anwendung target enthielt nur views und Controller.
Basierend auf diesem Modell, das ist, was ich getan habe, um meine Logik, die tests ordnungsgemäß funktionieren. Erstellen Sie eine neue target (Cocoa Touch Static Library) und verschieben Sie alle Dateien auf Logik geprüft (in der Regel alle Modelle), um dieses neue Ziel. Unter "Build-Phasen" Einstellungen fügen Sie diese neue Bibliothek in "Link-Binary Mit Bibliotheken" Ihrer Anwendung Ziel-und Logik-tests Ziel.
Kann ich mir vorstellen, dass diese Anweisungen sind ein wenig verwirrend. Wenn Sie sezieren die Probe-Projekt, das oben erwähnt ist, erhalten Sie eine bessere Idee.
Hinweis, ungetestet auf Xcode 5.
Ich verwendet @jon-reid ' s Antwort, fand aber, dass Xcode fügt environment-Variablen, um die
xcuserstated
Teil XcodeProjects, und diese sind vom Benutzer bestimmten und in der Regel nicht an das repository übergeben. Also ich swizzle meineAppDelegate
zu überschreiben, dessen Belastung:Beachten Sie, dass die folgenden ist einfacher und funktioniert immer noch, obwohl ich bin nicht sicher, es ist zuverlässig:
Dies funktioniert, weil Kategorien von Methoden in dynamisch belasteten Komponenten (wie die testing-bundle) Vorrang. Swizzling fühlt sich sicherer, wenn.
MyAppDelegate
zu was auch immer Ihre AppDelegate der Klassenname ist in Ihrem Haupt-Ziel. Ihre test-target nicht eine app haben, die delegieren, aber das ist der Punkt dieser Frage, der app-Abgeordneter aus dem main target ist noch ausgeführt.Mit xCode 7 und xctool
xctool ist in der Lage die Ausführung von unit-tests ohne den simulator.
Damit dies funktioniert,
1 . Aktualisieren Sie die target-Einstellungen ausführen, ohne eine host-Anwendung.
Wählen Sie Ihr Projekt aus --> testen Sie dann die Ziel --> Legen Sie die host-Anwendung keine.
2. Installieren xctool , wenn Sie es nicht haben.
3. Führen Sie die tests mit terminal mit xctool.
ich verwendet habe, GHUnit zu schaffen, osx/ios kompatibel test-Suiten. es gibt ein paar Probleme, aber ich fand es war mehr zuverlässig/kompatibel/unkomplizierter als OCUnit.
GHUnit stellt die grundlegende Vorlage Projekte für OS X und iOS, das macht die Ersteinrichtung einfacher.
Hinweis: ich in der Regel nur mit meinem eigenen kit für die meisten meiner Tests.