Ist es möglich, HTTP-Anfragen in automatisierten Xcode 7-UI-Tests zu stubben?

8

Ich habe versucht, HTTP-Anfragen in automatisierten Xcode 7-UI-Tests abzufangen und zu stempeln, indem ich Tools wie OHHTTPStubs verwendete, ohne Glück.

Hier ist ein Beispiel, wie ich versuche, eine HTTP-Anfrage mit OHHTTPStubs in der setUp-Methode einer UI-Testdatei zu erfassen:

%Vor%

Gibt es etwas über die Funktionsweise des UI-Tests, das dies verhindert? hat das jemand geschafft?

    
dtrenz 28.09.2015, 16:22
quelle

2 Antworten

8

Wie Martijn zu Recht betont hat, können Sie zur Laufzeit nicht direkt mit der App interagieren, so dass jede HTTP-Verspottung oder Manipulation von Dingen wie NSUserDefaults in XCUITestCase sich nicht auf Ihre App auswirkt / p>

Wenn Sie wirklich in der Lage sein müssen, HTTP oder Setup & amp; Um Ihre Apps-Umgebung für bestimmte UI-Tests zu deaktivieren, müssen Sie Startargumente festlegen oder Umgebungsvariablen starten, bevor Sie die App in der setUp() -Methode eines XCUITestCase starten und dann Ihren App-Code ändern, um die Startargumente oder Umgebungsvariablen zu lesen bootstrap die Testumgebung.

Beispiel Testfall

%Vor%

Beispiel AppDelegate

%Vor%

Hinweis: Um in diesem Beispiel ein HTTP-Mocking-Framework wie OHHTTPStubs zu verwenden, müssen der Stubbing-Code und alle JSON-Fixtures, die Sie verwenden müssen, nicht in Ihrem App-Ziel sein das Testziel.

Dies ist ein sehr nützlicher Thread zum Thema: Ссылка

    
dtrenz 08.10.2015, 15:04
quelle
3

UI-Tests werden in einer separaten Instanz von Ihrer Anwendung ausgeführt. Während die Klassen aus der Anwendung möglicherweise für Sie verfügbar sind, sind sie nur eine Kopie.

In Ihrer Anwendung können Sie feststellen, ob Sie im UI-Testmodus mit den folgenden Lösungen arbeiten: Erkennen, ob die iOS-App im UI-Testmodus ausgeführt wird

Ich persönlich ging mit der im ursprünglichen Beitrag erwähnten launchEnvironment Lösung; Mein Setup sieht so aus:

%Vor%

Und einer meiner Singleton-Instantiatoren (genannt RealmManager ) sieht so aus (zum Instanziieren einer Realm-Datenbank):

%Vor%

Wenn Sie die Duplizierung nicht mögen, aber wahrscheinlich sowieso XCUIApplication().launch() duplizieren, können Sie immer eine benutzerdefinierte Testfallklasse erstellen, die XCTestCase erweitert, die setUp dort mit dieser Ergänzung überschreiben und dann diese in allen Ihren verwenden Testklassen.

    
Martijn Hols 29.09.2015 10:32
quelle

Tags und Links