it-swarm.com.de

XCode 5-Einheitentest: Startet meine App

Wenn ich meine Tests in XCode 5 durchführe, wird das Hauptfenster meiner OS X-App für einige Sekunden auf dem Bildschirm angezeigt, während die Tests ausgeführt werden. Warum? Auch wenn ich alle Tests unkommentiert habe, öffnet sich immer noch mein Hauptfenster.

32
dhrm

Sie führen den Anwendungstest aus, nicht den Logiktest. Dies bedeutet, dass eine Instanz Ihrer App gestartet wird und die Komponententests ausgeführt werden. Auf diese Weise können Sie einige Integrationstests durchführen, für die die Ausführung Ihrer App erforderlich ist.

Hier ist die Anleitung zum Einrichten des Anwendungstests und des Logiktests.

Wenn Sie es in Logiktest ändern möchten (damit es schneller läuft und Sie Ihre App nicht zuerst starten müssen)

  1. gehen Sie zu den Build-Einstellungen für Ihr Gerätetestziel
  2. suche Bundle
  3. bundle Loader und Test Host entfernen

enter image description here

37
Bryan Chen

Das ist richtig, Sie müssen "Bundle Loader" und "Test Host" aus Ihren Build-Einstellungen löschen. 

Sie müssen jedoch die erforderlichen Implementierungsdateien zu Ihrem Gerätetestziel hinzufügen. Die erforderlichen Dateien sind das, was Sie in Ihren Gerätetestfällen verwenden möchten. Sie müssen dies tun, da XCode bei Logiktests nicht die gesamte Anwendung kompiliert. Es werden also einige Dateien fehlen.

Dies ist eine Fehlermeldung, wenn Sie eine Datei ausgelassen haben:

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_Module", referenced from:
      objc-class-ref in Lobic Network.o
      objc-class-ref in Logic_Unit.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Sie können die fehlenden Dateien hinzufügen, indem Sie die Implementierungsdatei auswählen und den Dateiinspektor aufrufen. Es wird einen Abschnitt mit dem Namen "Target Membership" geben, in dem Sie die Dateien als Zielmitgliedschaft für Ihren Unit-Test festlegen können. 

10
Szasza

Bei XCTest müssen die Anwendungsdateien DO NOT in den XCTest-Zielen enthalten sein. Das XCTest-Bundle ist mit der Anwendung verknüpft, die diese Dateien zur Laufzeit zur Verfügung stellt. 

Damit dies funktioniert, stellen Sie sicher, dass die Compiler-Option "Standardmäßig ausgeblendete Symbole" im Anwendungsziel auf NO gesetzt ist.

Hier ist ein Blog-Post mit Screenshots zur Verdeutlichung: http://zmcartor.github.io/code/2014/02/24/slim-xctest-targets

Der Vorteil dieses Ansatzes ist, dass Test-Target-Builds viel schneller durchgeführt werden.

9
HackaZach

In XCode 7 funktioniert das Entfernen von Host Application Bei mir nicht. In der Tat benutze ich das Folgende, um App-Läufe zu vermeiden.

  1. Setup-Testschema-Argumente enter image description here

  2. in main.m

    static bool isRunningTests()
    {
        NSDictionary* environment = [[NSProcessInfo processInfo] environment];
        NSString* testEnabled = environment[@"TEST_ENABLED"];
        return [testEnabled isEqualToString:@"YES"];
    }
    
  3. haupt () ändern

    int main(int argc, char * argv[]) {
        @autoreleasepool {
            if (isRunningTests()) {
                return UIApplicationMain(argc, argv, nil, nil);
            } else {
                return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
            }
        }
    }
    
4
Nicholas Ng

Wenn es sich bei den Tests um Code handelt, der auf Desktop- und Mobilgeräten ausgeführt werden kann, können Sie sie ohne Simulator oder Hosting in Ihrer App ausführen. 

Das Problem ist, dass Sie die Schemaauswahl nicht für Ihr normales Ziel (Desktop oder iOS) verwenden können, um den Test auszuführen.

Folgendes hat für mich in Xcode6 funktioniert.

File > New Target...

Wählen Sie Cocoa Testing Bundle aus der Kategorie OS X aus.

enter image description here

Achten Sie darauf, None aus der Dropdown-Liste für das Ziel auszuwählen.

Specify new test target

Klicken Sie auf Fertig stellen. Fügen Sie die relevanten Dateien wie oben beschrieben zum neuen Ziel hinzu.

Erstellen Sie nun ein Schema, um den Test auszuführen.

Klicken Sie oben rechts auf den Auswahlschema und wählen Sie New Scheme.... Klicken Sie auf das Dropdown-Menü und navigieren Sie in der Liste zum neuen Ziel. Jetzt können Sie das Schema aus der Schemaauswahl auswählen und die Tests mit ⌘U ausführen.

enter image description here

2
Sez

Ich habe nur einen Morgen damit verschwendet.

Das Projekt wurde in XCode 4 erstellt und verwendet SenTesting.

Migrationstests mit XCode 5/XCTTest getestet

Hatte dasselbe Problem - Die App wurde im Simulator ausgeführt und der Test wurde nie gestartet Nachdem alles versucht wurde (von App zu Logiktests wechseln, zu XCTest wechseln, SenTesting entfernen) 

aufgegeben hat ein sauberes XCode 5-Projekt erstellt.

Alle meine Dateien wurden hinzugefügt und die Tests wurden ordnungsgemäß ausgeführt.

Möglicherweise gibt es noch Probleme mit Storyboard, da diese mit XCode 4 erstellt wurden.

Drastisch, aber es funktioniert, also behalten Sie es als letzter Ausweg.

1
brian.clear

Auf XCode5 startet die App. Diese Antwort zeigt, wie der Delegat beim Ausführen von Komponententests so geändert wird, dass er sofort beendet wird: https://stackoverflow.com/a/20588035/239408

1
xverges