Unit Testet den HTTP-Datenverkehr in der Alamofire App
Bin ich kämpfen ein bisschen, um herauszufinden, wie Sie am besten testen Sie eine app, die verwendet Alamofire zu helfen, mit server synchronisieren-Daten.
Ich möchte in der Lage sein, um zu testen, mein code, der verwendet Alamofire und Prozesse JSON Antworten von einem server.
Ich möchte mock tests, so dass ich Sie auch füttern können die erwartete Antwort Daten die tests ohne echte Netzwerk-Verkehr.
Diesem blog-post (http://nshipster.com/xctestcase/) beschreibt, wie einfach es ist, ein Mock-Objekt in Swift - aber ich bin mir nicht sicher, wie man das mit Alamofire und seine verkettete Antworten.
Würde ich verspotte die Manager? die Anfrage? Antwort? Jede mögliche Hilfe würde geschätzt!
InformationsquelleAutor der Frage Daniel D | 2014-11-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin das hinzufügen eines weiteren Antworten, weil ich gerade gefunden habe dieses Vorgehen, die meiner Meinung nach einfacher ist und wirklich einfach zu Lesen und zu verwenden.
Habe ich einen dummy Alamofire Klasse enthält nur die Funktionen und die Typen, die erforderlich für tests.
Jetzt habe ich die Datei in die test-target anstelle der realen Alamofire.
Zum Beispiel habe ich meine version des
Request
Klasse, wo ich definieren, ein paar statische Variablen, die ich aufwerten, je nach test, und für diese Klasse habe ich schon implementiert, nur dieinit
und dieresponseJSON
Funktion.Kann ich nun simulieren Sie eine Antwort in einem test:
Die Anforderung ist hier definiert:
InformationsquelleAutor der Antwort MatterGoal
Diese Frage ist alt, aber ich hatte das gleiche Problem, und die Lösung ist ganz einfach, wenn Sie OHHTTPStubs.
OHHTTPStubs nur verspottet die Antworten erhalten Sie von NSURLSession, so dass es funktioniert gut mit Alamofire, und Sie bekommen sehr gute Abdeckung des code-Pfad.
Beispielsweise, die in den test-Fall, nur verspotten die Antwort mit:
InformationsquelleAutor der Antwort user541160
Warten auf eine Antwort von @mattt poste ich ein Beispiel von meinem code.
Lassen Sie uns sagen, dass wir ein
Client
Klasse, ist verantwortlich für den Aufruf eines einfachen web service. Diese Klasse implementiert eine Funktion namensuserSignIn
führt, dass ein Schild mit dem WS.Dies ist der code für die
userSignIn
Funktion:Dem Ziel, die Funktion ist, um ein token aus der web-service wenn der übergebene Informationen durch den Nutzer richtig sind.
Die Funktion
checkSignInResponse
(ich weiß nicht seinen code, da es nicht hilfreich für die Antwort) hat die Rolle, die der Valorisierung der 3 VariablenoperationComplete
accessToken
underror
je nach JSON-Antwort erhalten.Nun, dass die 3 Variablen haben einen Wert nennen wir die
completionHandler
mit Ihnen.Wie zum Hohn diese Funktion?!
Spotten die Antwort, die ich überschreiben der
userSignIn
- Funktion direkt in der test-Funktion (wie erläutert durch die NSHipster Artikel).dann habe ich Ersatz für die
client
innerhalb der view-controller, dass ich die Prüfung mit meinem "verspottet" - client. In diesem Fall bin ich testen, dass der controller übergibt an die Funktion die Informationen, die nicht gültigdamit ich mich vergewissern, dass dieerror
Eigenschaft des Controllers ist nicht null. Zu zwingen, diese Daten habe ich einfachoperationComplete
auf false gesetzt ist und ich die manuelle generieren einesNSError
.Macht es keinen Sinn für Sie? Ich bin mir nicht sicher, dass dieser test ist ein guter test... aber wenigstens kann ich überprüfen, ob die Daten fließen.
InformationsquelleAutor der Antwort MatterGoal