Ich schreibe eine iPhone-Anwendung, die einige Daten von einem Webserver erhalten muss. Ich verwende NSURLConnection
, um die HTTP-Anfrage auszuführen, was gut funktioniert, aber ich habe Schwierigkeiten, meinen Code zu testen, wenn die Antwort einen HTTP-Fehlercode hat (wie 404 oder 500).Testen der Verwendung von NSURLConnection mit HTTP-Antwort Fehlerstatus
Ich verwende GTM für Unit-Tests und OCMock für Spott.
Wenn der Server einen Fehler zurückgibt, wird die Verbindung nicht nennen connection:didFailWithError:
auf den Delegaten, fordert jedoch connection:didReceiveResponse:
, connection:didReceiveData:
und connectionDidFinishLoading:
statt. Ich überprüfe gerade den Statuscode auf der Antwort in connection:didReceiveResponse:
und rufe cancel
auf der Verbindung auf, wenn der Statuscode wie ein Fehler aussieht, um zu verhindern, dass connectionDidFinishLoading:
aufgerufen wird, wo eine erfolgreiche Antwort gemeldet würde.
Die Bereitstellung eines statischen Stubs NSURLConnection
ist einfach, aber ich möchte, dass mein Test das Verhalten ändert, wenn eine der Methoden der Scheinverbindung aufgerufen wird. Insbesondere möchte ich, dass der Test in der Lage ist zu sagen, wann der Code cancel
auf der Scheinverbindung aufgerufen hat, so dass der Test connection:didReceiveData:
und connectionDidFinishLoading:
auf dem Delegaten nicht mehr aufrufen kann.
Gibt es eine Möglichkeit für Tests, ob cancel
für das Mock-Objekt aufgerufen wurde? Gibt es eine bessere Möglichkeit, Code zu testen, der NSURLConnection
verwendet? Gibt es eine bessere Möglichkeit, HTTP-Fehlerstatus zu behandeln?
Würde es Ihnen etwas ausmachen, einen Beispielcode zu zeigen, wie Sie die Aufrufe von NSURLConnection testen? –