Asynchrone Prüfung mit Xcode 6 Im Jahr 2013 hat Apple ein umgestaltetes Test-Framework in Xcode namens XCTest ausgeliefert, und es gab viel Freude. Das alte Framework wurde nicht in Jahren aktualisiert, und eine Reihe von Drittanbieter-Test-Tools und Frameworks entstanden, um neue Funktionen und Fähigkeiten bieten. Es war gut zu sehen, dass die eingebauten Werkzeuge immer wieder Liebe haben, und in diesem Jahr schickt Apple ein paar Features mit Xcode 6, die im letzten Jahr fehlten. Ich bin besonders froh zu sehen, ist die Unterstützung für asynchrone Tests. Wenn wir einen Test haben, der eine asynchrone Aufgabe ausführen muss, ob er in einem anderen Thread oder in den Haupt-Threads Runloop läuft, wie testen wir ihn. Betrachten Sie eine Web-Anfrage. Wir könnten eine Web-Anfrage starten und in einen Fertigstellungsblock übergeben, dann machen wir unsere Test-Behauptungen, entweder im Fertigstellungs-Handler oder nicht. Allerdings, weil die Web-Anfrage noch nicht einmal gemacht wurde, viel weniger eine Antwort erhalten noch hat unsere Fertigstellungsblock aufgerufen wurde, wird unsere Testmethode zu beenden, bevor die Behauptungen jemals getestet werden. Lasst uns einen Test für eine Klasse ansehen, die Webseiten herunterlädt. Normalerweise möchten wir keine echten Web-Anfragen in Tests machen. Stattdessen verstopfen die Anfragen mit einem Werkzeug (Im partiell zu OHHTTPStubs). Aber für die Zwecke dieser Beispiele, brechen einige Regeln und machen echte Web-Anfragen. Wir können die Klasse unter Test eine URL und Beendigung Handler Block, und es wird die Seite herunterladen und rufen Sie den Block, übergeben in einem String mit der Web-Seite oder eine leere Zeichenfolge, wenn ein Fehler auftritt. Sein nicht eine große API, aber wieder, brechen einige Regeln. Allerdings wird der Testcode unten niemals scheitern. Die Testmethode wird zurückkehren, ohne den CompletionHandler-Block zu geben, eine Chance zu rufen. Vor Xcode 6s Version von XCTest, nur mit dem, was kommt in der Dose mit Xcode, könnten wir sitzen und drehen in einer while-Schleife, die die Haupt-Threads Run-Schleife aufruft, bis die Antwort ankommt oder einige Timeout-Periode verstrichen ist. Heres Arbeit Test Code, der alte Weg. Die while-Schleife führt die Haupt-Threads Laufschleife für 10 Millisekunden zu einer Zeit, bis die Antwort ankommt, oder bis 5 Sekunden verstrichen, ohne dass es angekommen ist. Das ist brauchbar. Es ist nicht schrecklich. Es ist nicht das Ende der Software-Entwicklung Welt, aber es ist nicht großartig. Jetzt gibt es einen besseren Weg. Hohe Erwartungen Mit Xcode 6 hat Apple Test-Erwartungen an das XCTest-Framework in Form der XCTestExpectation-Klasse hinzugefügt. Wenn wir eine Testerwartung instanziieren, erwartet das Test-Framework, dass es irgendwann in der Zukunft erfüllt wird. Unser Testcode erfüllt die Erwartung im Fertigstellungsblock mit einem Aufruf zur XCTestExpectation-Methode. Dies ist der Ort der Einstellung einer Flagge wie responseHasArrived in der vorherigen Beispiel. Dann sagen wir dem Test-Framework zu warten (mit einem Timeout) für seine Erwartungen erfüllt werden über die XCTestCase-Methode waitForExpectationsWithTimeout: Handler. Wenn der Fertigstellungshandler innerhalb des Timeouts ausgeführt wird und Anrufe erfüllt sind. Dann werden alle Prüfungserwartungen erfüllt. Wenn nicht, dann wird der Test eine traurige, einsame, unerfüllte Existenz leben, bis es aus dem Geltungsbereich geht. Und indem ich eine traurige, einsame, unerfüllte Existenz lebe, meine ich, dass die Erwartung den Test beim Timing ausfällt. Die gescheiterte Erwartung sollte sich nicht so niedergeschlagen fühlen. Denken Sie daran, dass ein fehlendes Ergebnis ist nicht das Zeichen eines schlechten Tests ein unbestimmtes Ergebnis ist. Diese Erwartung kann Stolz fühlen, wie es Versagen erklärt Heres ein Beispiel mit XCTestExpectation: Erstellen Sie die Erwartung mit einer Beschreibung, um die Ergebnisse besser lesbar zu machen. Im Fertigstellungsblock erläutern sich die Erwartungen, den Test zu erklären, dass diese Erwartung tatsächlich erfüllt ist. Dann hängen Sie in der waitForExpectationsWithTimeout: Handler: bis die Anfrage gesendet wird, kommt die Antwort an und unsere Fertigstellungshandler wird aufgerufen oder das Timeout wird aufgerufen. Das ist gut ol Objective-C, aber wir können es auch in Äpfeln glänzende neue Swift-Sprache machen. Und das ist es. Es ist eine einfach zu bedienende Klasse zum Testen von asynchronen Code. Cant bekommen genug Info über iOS 8 und Swift Begleiten Sie uns für unseren Anfang iOS mit Swift und Advanced iOS bootcamps. introduction. js Jasmine ist ein Verhalten-driven Entwicklungs-Framework für die Prüfung JavaScript-Code. Es hängt nicht von anderen JavaScript-Frameworks ab. Es braucht kein DOM. Und es hat eine saubere, offensichtliche Syntax, so dass man leicht schreiben können Tests. Dieser Führer läuft gegen Jasmine Version, die in RUNTIME GEFÜLLT ist. Standalone Distribution Die Release-Seite hat Links zum Download der Standalone-Distribution, die alles enthält, was Sie brauchen, um Jasmine zu starten. Nach dem Herunterladen einer bestimmten Version und Entpacken, öffnen SpecRunner. html wird die enthaltenen Spezifikationen laufen. Sie merken an, dass sowohl die Quelldateien als auch ihre jeweiligen Spezifikationen im ltheadgt der SpecRunner. html verknüpft sind. Um mit Jasmine zu beginnen, ersetze die sourcespec Dateien mit deiner eigenen. Suites: beschreiben Sie Ihre Tests Eine Test-Suite beginnt mit einem Aufruf der globalen Jasmine-Funktion beschreiben mit zwei Parametern: eine Zeichenfolge und eine Funktion. Die Zeichenfolge ist ein Name oder ein Titel für eine spec Suite - in der Regel, was getestet wird. Die Funktion ist ein Codeblock, der die Suite implementiert. Spezifikationen werden durch den Aufruf der globalen Jasmin-Funktion definiert. Die, wie beschreiben, nimmt einen String und eine Funktion. Die Zeichenfolge ist der Titel der Spezifikation und die Funktion ist die Spezifikation oder Test. Eine Spezifikation enthält eine oder mehrere Erwartungen, die den Zustand des Codes testen. Eine Erwartung in Jasmin ist eine Behauptung, die entweder wahr oder falsch ist. Eine Spezifikation mit allen wahren Erwartungen ist eine vorübergehende Spezifikation. Eine Spezifikation mit einer oder mehreren falschen Erwartungen ist eine fehlerhafte Spezifikation. It39s Just Functions Seit beschreiben und es blockiert Funktionen sind, können sie alle ausführbaren Code enthalten, um den Test zu implementieren. JavaScript-Scoping-Regeln gelten, so dass Variablen in einem beschreiben deklariert sind, um alle es in der Suite blockieren. Jasmine hat Test doppelte Funktionen genannt Spione. Ein Spion kann jede Funktion verstoßen und verfolgt Anrufe und alle Argumente. Ein Spion existiert nur in der beschreibenden oder es blockieren, in dem es definiert ist, und wird nach jeder Spezifikation entfernt werden. Es gibt spezielle Matcher für die Interaktion mit Spionen. Diese Syntax hat sich für Jasmine 2.0 geändert. Der toHaveBeenCalled Matcher wird wahr, wenn der Spion aufgerufen wurde. Der toHaveBeenCalledWith Matcher wird true zurückgeben, wenn die Argumentliste mit einem der aufgezeichneten Anrufe zum Spion übereinstimmt.
No comments:
Post a Comment