traceoutput">

Testen eines Dynamic Vertrag mit Ajax

Coding Vertrag mit Test-Driven Development Techniques

Coding den Vertrag mit agilen und Test-Driven Development Techniken bedarf der Schriftform eine Reihe von Tests und Durchführung aMock URL Schicht. Problem Sie wollen den Vertrag mit diesen Techniken Entwicklung Code. Solution Um zu zeigen, definieren wir einen Anwendungsfall, der Umsetzung der Use Cases als einen Vertrag, schreiben Sie einen Testfall (n) den Vertrag zur Umsetzung, Implementierung des Vertrags in die falsche URL, und schließlich führen Sie den Test. Das Beispiel ist XMLHttpRequest-basiert, als Sie wahrscheinlich werde mit XMLHttpRequest für Ihre Testzwecke. Allerdings sind die Vertrags-und Mock-URLs nicht ausdrücklich in die Client-oder Server-Code integriert, so dass Sie alle Client überprüfen kann. Dieser Artikel ist über das Erstellen von Web-Services, und Sie können Web-Services durch ein XMLHttpRequest-Client-Aufruf durch ein Mashup-Client, oder durch eine server-seitige Web-Service-Aggregator. Das Beispiel verfügt über eine Rechner-Anwendung, die nur einem einzigen Vorgang zum Hinzufügen enthält zwei Zahlen zusammen. Was macht den Rechner Operation einzigartig ist, dass er temporäre URLs verwendet, um eine Geschichte der Vergangenheit Ergänzungen zu halten.

Der Anwendungsfall ist die Addition zweier Zahlen, aber zwei Dinge passieren muss für die Durchführung der Use-Case: Neuausrichtung und Ergänzung. Die Einzelheiten der Verwaltung Umleitungen sind hier nicht behandelt, sondern wird im folgenden Abschnitt mit dem Titel "Dynamic Testing ein Vertrag abgedeckt werden . "Wie die temporäre URL ist entschlossen, fällt in die Kategorie der Feenstaub, also lasst uns über die Einzelheiten des Vertrages, dass der Zusatz führt zu konzentrieren. Die folgenden stellt die HTTP-Anfragen verwendet, um eine Addition:

POST / services/calculatorrest/operations/2364564565 HTTP/1.1 Content-Type: application / json User-Agent: Jakarta Commons-HttpClient/3.0 Host: localhost: 8100 Content-Length: 25

In dem Antrag ist ein HTTP-POST ausgeführt wird, und die URL verwendet wird die temporäre URL in die Umleitung-Test festgestellt. Die HTTP-Header Content-Type und Content-Length nicht freiwillig und werden verwendet, um die Art und Länge der Inhalte zu definieren geschickt mit der POST-Anfrage. Der Körper des Antrags enthält einen Pufferüberlauf kodiert mit Hilfe von JavaScript Object Notation (JSON) .13 Zwei Mitglieder sind Daten in das JSON-Anfrage definiert: number1 und number2. Diese beiden Daten Mitglieder repräsentieren die Zahlen addiert werden. Nachstehend finden Sie die geeignete Reaktion:

HTTP/1.1 200 OK Content-Type: application / json Content-Length: 14 Server: Jetty (6.0.x) ( "result": 3)
  

Die Header Content-Type und Content-Length beschreiben den Inhalt, der zurückgegeben wird, die codiert wird mit JSON und enthält eine einzige Daten-Mitglied. Die einzigen Daten Mitglied Ergebnis ist das Ergebnis der Addition von zwei Zahlen zusammen. Wie man auf den Anfragen und Antworten suchen und einige Kopfrechnen, dann wissen Sie, dass Zugabe von 1 und 2 ergibt die Summe von 3. Aus der Sicht des Vertrags scheint es, dass alles in Ordnung ist und dass das System implementiert ist und funktioniert. In Wirklichkeit aber waren die dargestellten HTTP Gesprächen alle gefälscht. Dies führt zu folgender Frage: Bei der Entwicklung eines Vertrages, wie definieren Sie physisch den Vertrag? Ein Purist könnte sagen: "Der Vertrag wird über einen Art von Instrument, das die Client-und Server-Programmierer dann umsetzen." Das puristische Antwort hört sich gut an und wäre toll, wenn ein solches Instrument existiert. Leider können Sie kein Werkzeug, um Design-basierte REST HTTP Gespräche, die als Grundlage für die Test-und Mock URL Schicht dienen können. Mit der Tatsache, dass Sie nicht ein solches Instrument verfügen, mit einem Editor, um die HTTP-Gespräch manuell erstellen Angesichts ist unglaublich fehleranfällig und mühsam. Ich behaupte nicht, dass irgendjemand das tun sollten. Allerdings müssen Sie noch einen Vertrag zu definieren, aber man kann es nicht ohne ein Werkzeug oder ein Editor. Ohne jede Art von Dokumentation, bleibt der Vertrag buchstäblich eine Ausgeburt der Phantasie.

 Quelle: / Jaxson / trunk / website / root / scripts / templates / testcontract.html  Contract Test Page 

Verfügbare Tests

testManager.runAll () "Type =" button "value =" Run Alle Tests "/>
Test Status
testManager.testPrototype () "Type =" button "value =" Test-Prototyp "/> Nicht ausgeführt
hr /> table border = "1">

Trace-Ausgabe

Der Code ist relativ lang, so habe ich die wichtigen Stücke markiert, um es einfacher zu verstehen. Der Test-Code verwendet das Skript-Tag, um eine Reihe von JavaScript-Dateien, die die Grundlage der Prüfung Code liefern enthalten. Nachdem Sie das Basis-Skript zu laden, leitet das erste Stück der hervorgehobenen Code setJsUnitTracer die generierten Warnungen und Informations-und Debug-Nachrichten des aktuellen HTML-Seite. Insbesondere wird die Ausgabe in der Tabelle Element mit der id traceoutput, die in Fettschrift auf der Unterseite der HTML-Code angezeigt wird generiert.

Die anderen fett-Quellcode wird die Variable baseURL, die eine Variable, die auf die Auftrags-URLs, die in der Test-Skript verwendet werden darstellt. Es ist wichtig für alle Vertrags-URLs in diesem Bereich so zu definieren, dass es klar ist, welche URLs müssen unterstützt werden. Wenn eine URL kann nicht vor der Zeit wegen seiner dynamischen Natur bestimmt werden, dann können Sie eine Variable deklarieren und weisen eine leere Zeichenfolge. Das nächste Stück im Fettdruck sind eine Variable (testsToRun) und eine Funktion (testPrototype). TestPrototype Die Funktion ist ein Beispiel dafür, wie konnte man einen Test zu schreiben. Denken Sie daran, diese beiden wichtigen Schritte aus: Verwenden Sie Synchron, und rufen Sie die Methode testManager.success. Synchron ist eine Hilfsklasse, die eine synchrone XMLHttpRequest anrufen können. Normalerweise in Ihren Anwendungen würden Sie die Asynchronous-Klasse, die asynchronen XMLHttpRequest fordert Gebrauch macht. Lassen Sie uns einen Blick auf die Unterschiede zwischen asynchronen und synchronen Anfragen und diskutieren, warum Sie entweder hatte.

Wenn XMLHttpRequest verwendet wird, um eine synchrone Antrag zu stellen, XMLHttpRequest wartet auf eine Antwort, bevor er die Kontrolle an den Browser. XMLHttpRequest gestützt auf eine Antwort warten, ist ein Problem, weil JavaScript ist multithreaded, so dass der Browser zu sperren. Für eine bessere Nutzererfahrung, sollten Sie immer mit asynchronen Aufträge. Verwenden von asynchronen Aufträge hat seine eigenen Probleme. Eine asynchrone Forderung nicht warten, bis die Antwort und die Kontrolle an den JavaScript. Wenn die Ausführung von Tests, sind asynchrone Anfragen ein Problem, denn Tests werden nacheinander ausgeführt, nicht gleichzeitig. Beim Schreiben von Ajax und REST-Code, verwenden Sie die folgende Faustregel: Verwenden Sie asynchrone Anfragen für Anwendungen, und verwenden Sie synchronen Anforderungen für die Prüfung. Kommen wir zurück auf das Beispiel Funktion testPrototype, muss jeder Test-Funktion anzugeben, ob der Test erfolgreich war.

Dies ist erforderlich, weil, wenn der Test-Manager alle Versuche, den nächsten Test wird nur ausgeführt, wenn der aktuelle Test erfolgreich ausgeführt wurde. Im Beispiel ist ein Erfolg, wenn die Methode testManager.success aufgerufen wird. Aufruf der Methode gescheitert weist auf einen Fehler, und die Methode wartet darauf hinweisen, dass der Test mehrere Schritte umfasst und muss für eine Antwort, bevor Sie entscheiden Erfolg oder Misserfolg zu warten. Moving on, in dem Beispiel HTML-Quellcode-Datei, testManager.setTestCases die Methode verbindet die Tests mit dem Test-Manager. Der Test Manager durchläuft alle Tests in der Variablen testsToRun definiert und erzeugt ein Proxy, der eine Verkapselung, die ursprünglich definierten Methode. Sie können mehr darüber lesen in Artikel 2. Wenn die Ausführung von Tests, nicht gekennzeichnete Beiträge geben die Variable testsToRun, sondern der Testmanager Variable TestManager. Nach dem Test Manager Methode setTestCases Initialisierung abgeschlossen ist, können Sie Ausführen der Tests. In dem Beispiel HTML-Quellcode, Tabellen (

) Dynamisch festgelegt, um Hinweise auf die Prüfungen enthalten. Die erste Tabelle enthält Schaltflächen verwendet, um die Tests als Gruppe oder einzeln ausführen. Um alle Tests durchzuführen, rufen Sie die Methode testManager.runAll (). Um einen einzelnen Testlauf, führen Sie die Methode TestManager. [Testname]. Die zweite Tabelle ist für die Generierung der Logging-Ausgabe verwendet.

Let's erster Test der Neuausrichtung und zusätzlich, wie der folgende Code-Schnipsel dargestellt.

 Quelle: / Jaxson / trunk / website / ROOT / Rechner / testcontract.html var entityURL = ""; var testsToRun = (testVerifyAdd: function () (info ( "testVerifyAdd", "Running testVerifyRedirection erste"); testsToRun.testVerifyRedirection (); Info ( "testVerifyAdd", "Finishing ausgeführt testVerifyRedirection"); var state = new Object (); state.number1 = 1; state.number2 = 2; var buffer = JSON.stringify (state); info ( "testVerifyAdd", "JSON Buffer (Puffer + + ")"); var request = new Synchron (); request.complete = function (statusCode, statusText, responseText, responseXML) (var response = JSON.parse (responseText) info; ( "testVerifyAdd.complete "," Add Ergebnis ( "+ + responseText ")"); assertEquals (" JSON Ergebnis ", 3, response.result); testManager.success (" addTest ");) request.POST (entityURL," application / json " , buffer.Length, buffer);)); ... 

Das Code-Snippet zeigt die JavaScript-Code, der Prüfung enthält und die HTML-Snippet zeigt, wie die Prüfung durch den JavaScript-Aufruf definiert. Die Variable entityURL verweist auf den Vertrag URL verwendet, um eine Addition. Die Variable ist nicht belegt eine vordefinierte URL, weil die URL dynamisch in einem anderen Test nicht in einem Auszug dargestellt geschaffen. Unter die Definition der Variablen testsToRun Enthalten ist eine Funktion, die testVerifyAdd stellt den Test verwendet, um eine Addition. Um den Test ausführen, ruft der Testmanager die dynamisch definierte Methode TestManager. TestVerifyAdd, die testsToRun.testVerifyAdd fordert. Das Ziel der Schaffung eines Proxy Prüfung ist die Prüfung zu ermöglichen, Manager der Testumgebung, dass die Test-Anrufe verwalten. Bei der Durchführung des testVerifyAdd, ist der nicht dargestellten Test testVerifyRedirection aufgerufen. Die testVerifyRedirection führt zu überprüfen, ob die Variable entityURL wird eine URL-Referenz gültig. Beachten Sie, wie die nicht dargestellten Prüfung verwiesen wird mittels der variablen testsToRun und nicht TestManager.

Früher sagte ich, dass Sie TestManager einen Testlauf nennen sollten, und nicht die Prüfung direkt. Das Faustregel gilt nur, wenn Sie einen Testlauf und nicht bereits ein Test ausgeführt werden soll. Der Hauptgrund, warum Sie nicht nutzen würden, TestManager ist, dass, wenn eine Ausnahme erzeugt wird, die aktuell laufenden Test beenden wollen. Calling einen Test mit TestManager innerhalb einer Testergebnisse in der Exception gefangen und den aktuellen Test weiterhin als wenn alles gut geht. Natürlich bedeutet dies nicht, dass Sie dieses Verhalten nicht wünschen konnte, und man konnte einen Test aus TestManager nennen. Die Wahl liegt bei Ihnen, aber es ist wichtig, dass der Grund für den Aufruf jeder verstehen. Nach Aufforderung der nicht dargestellten testVerifyRedirection Test, der Prüfung der Durchführung einer Zusätzlich hat begonnen. Der Test überprüft wird, dass das Hinzufügen 1 und 2 ergibt sich der Wert 3. Die Daten werden in ein JavaScript-Objekt-Instanz Zustand gelagert werden, dass Sie eine Instanz und zuweisen. Sie serialisieren den Zustand des Objekts, auf das JSON-Format unter Verwendung der Methode JSON.stringify.

Sobald Sie den Zustand überführt in einen String-Puffer, senden Sie sie an den Server mit der Methode request.POST. Die Methode request.POST ist ein HTTP-POST-Anfrage, die Erfüllung der Anforderungen von REST. Wenn die request.POST Methode reagiert die Methode request.complete aufgerufen wird. In der anonymen Methode Umsetzung der request.complete, ist der zurückgegebene Puffer formatiert JSON. Um die JSON-Puffer in einen Zustand zu konvertieren, rufen Sie die Methode JSON.parse. Sie ordnen den Staat zurückgegeben, um die Variable Antwort. Der Staat enthält den Wert der Zugabe und der Wert ist geprüft nach der Methode assertEquals. Wenn der Wert nicht 3, so das Test-Framework-Trigger, der Fänge und Prozesse eine Ausnahme. Bei beiden Beispiel können Sie sehen, welche Tests waren erfolgreich und welche Tests gescheitert. Wenn ein Test fehlschlägt, wird eine Fehlermeldung besagt, warum der Test fehlgeschlagen. Darüber hinaus werden informative Meldungen erzeugt, so dass Sie wissen, was Ihre Tests tun und welche Daten gesendet werden. Der Test wird als ein einzelner Test geschrieben und nicht zu einem vollständigen Vertrag zu prüfen. Wenn Sie den Client-side Tests in Ihren Vertrag zu implementieren, sollten Sie zum Testen Beschäfti-driven development Techniken, die Tests, die erfolgreich und Tests, die nicht enthalten. Lassen Sie uns jetzt konzentrieren Verlagerung vom Client zum Server. Sie wollen nicht auf einen kompletten Arbeitstag serverseitige Implementierung umzusetzen, sondern die falsche URL Umsetzung Schicht.

Für den Umfang dieser Lösung wird Java verwendet. Der Zweck die falsche URL Schicht zu imitieren und Umsetzung Server-Funktionen. Nachahmen und Umsetzung von server-side functionality, ist trickreich, weil Sie nur gezielt umzusetzen Testfälle. Im Falle des Beispiels, dass die Umsetzung der bei Zugabe von 1 und 2 bedeutet. Natürlich ist der Zusatz von 1 und 2 ist trivial, und im Falle der die falsche URL, können Sie es innerhalb von Sekunden durchzuführen. Allerdings gibt es auch kompliziertere Fälle sind, so sollten Sie nicht dazu verleiten, eine Lösung bieten. Der Schwerpunkt der Mock URL Schicht ist zu korrigieren Anfragen und Antworten für bestimmte Tests zu bieten. Durch die Implementierung der Logik sind, Sie die Einstellung der eigenen sich für einen Fehler, da die Logik muss geprüft werden. Sagen wir es so: Stellen Sie sich vor der Umsetzung der triviale Addition zweier Zahlen. Woher wissen Sie, dass Ihre Anwendung ordnungsgemäß funktioniert? Die Antwort ist, dass Sie Tests zu schreiben. Allerdings ist diese Antwort nicht die Frage richtig, denn wie Sie wissen, dass die Prüfungen ordnungsgemäß durchgeführt werden kann? Die Antwort ist, dass Sie dies nicht tun, und dass der Zweck die falsche URL Schicht ist. Der folgende Quellcode implementiert die Anfrage und Antwort des Add Vertrag.

 Quelle: / jaxson.java.tests / Devspace / Jaxson / tests / Rechner / mockurl / DoMockAdd.java public class DoMockAdd MockUrlTestCaseBase (public void processRequest erweitert (HttpServletRequest request, HttpServletResponse response) throws IOException ( assertAreEqualJSONObject (request, "requestadd.json");try ( FileWriter.writeFileObject ( "application / json", Antwort, "responseadd.json");) Catch (Exception e) (throw new IOException ( "Could not write file Antwort", e);) response.setStatus (200);))

Zwei Methodenaufrufe sind fett dargestellt. Die Methode assertAreEqualJSONObject vergleicht die gesendeten Daten von der Java-Servlet, um die Datei requestadd.json gespeichert. Wenn die gesendeten Daten entspricht dem Inhalt der Datei, dann mit der nächsten Methode nennen writeFileObject ausgeführt wird. Der Zweck der writeFileObject ist es, die Inhalte der Datei responseadd.json an den Client zu schicken. Die Dateien requestadd.json und responseadd.json stellen vordefinierten Verträge verwendet, um zwei Zahlen addieren. DoMockAdd Die Klasse hat keine Ahnung, was das Ziel der Operation ist. Sie weiß nur, dass, wenn der Antrag entspricht einer Datei, dann eine Antwort auf eine andere Datei gesendet wird. Die falsche URL Schicht Umsetzung ist einfach, aber kann nur mit einem einzigen Fall um zwei bestimmte Nummern und die Schaffung einer einzigen Reaktion befassen. In die falsche URL Schicht Beispielsweise führen Sie mehrere Tests zu sehen, welcher Testfall wird abgestimmt. Wenn ein Testfall zutrifft, ist die angemessene Antwort gesendet wird. Wenn keine Testfälle entspricht, dann wird keine Antwort gesendet wird, und eine Fehlermeldung generiert wird.

Die Methode assertAreEqualJSONObject vergleicht die JSON-Daten, die die JSON-Daten in eine Datei gesendet wird. Nicht zu glauben, dass ein Byte-für-Byte-Vergleich durchgeführt wird irregeführt werden. Die Methode assertAreEqualJSONObject führt eine logische Vergleich auf das Format der Daten. Dies ist wichtig, weil sonst, Leerzeichen oder andere Zeichen, die nicht den Zustand der Daten beeinflussen könnten dazu führen, dass ein Test fehl. Sie wollen nicht, ein Test, weil andernfalls eine andere Formatierung, es sei denn natürlich können Sie das Testen einer bestimmten Formatierung der Daten wünschen. Zum Beispiel ist ein XML-Technologie, wo die meisten wahrscheinlich, dass Sie nicht möchten, dass Leerzeichen auf die Probe scheitern zu lassen. Nachdem Sie die falsche URL Schicht erstellt haben, können Sie den Client-Skripte, die die Verträge prüfen, wird zu prüfen. Basierend auf den Arbeiten Client-und Serverseite, subbing in einer Arbeitsgruppe oder Client-Server-Implementierung sollte sich nichts ändern das Verhalten. Wenn das Verhalten geändert wird, wird der Client Test-Scripts und Mock URL Implementierungen in Einklang stehen. Sie wollen weder der Auftraggeber noch der Server wissen, ob es läuft gegen einen Test oder eine tatsächliche Umsetzung. Sie sollten die folgenden Punkte bei der Erstellung von Verträgen erinnern:

• Die falsche URL Schicht stellt den endgültigen Vertrag zwischen dem Client und Server.

• Die falsche URL Schicht implementiert die Verträge über vordefinierte Dateien für Anfragen und Antworten.

• Die falsche URL Schicht kann nur gezielten Test Testfälle und sollten keine Codes, die bei der Umsetzung verwendet werden, da die Logik Fehler haben könnte.

• Beim Vergleich der gesendeten Daten mit den Daten in der Datei, verwenden Sie einen logischen Vergleich und nicht ein Byte-to-Byte-Vergleich. Ein Byte-für-Byte-Vergleich könnte Leerzeichen, die nichts mit dem Zustand eines Objektes zu tun haben, und würde dazu führen, dass ein Test fehl. Die Ausnahme von dieser Regel ist, wenn der Test erfordert die Überprüfung der Leerraum.

• Die falsche URL Schicht führt mehrere Tests auf die Anfrage gesendet wird und schickt die entsprechende Antwort. In den meisten Fällen wird der Antrag geprüft, die eine Datei, und die Antwort auf einer anderen Datei.

• Wenn Sie müssen die Logik in die falsche URL Ebene umzusetzen, stellen Sie sicher, dass es sehr gut getestet und stabil, so dass die Umsetzung als Referenz für die dazu dienen, wie der Vertrag zwischen dem Client und dem Server-Funktionen.

• Der Client-Side-Tests zum Überprüfen der Vertrag eine Umsetzung, wie der Vertrag verwenden vertreten und werden verwendet, um die Richtigkeit der serverseitige Implementierung zu überprüfen.

• Sie können die Client-seitige Vertrag Tests und Mock URL Schicht entwickeln zusammen mit testdriven Entwicklung Techniken.

• Sie können die Client-seitige Vertrag Tests in einer beliebigen Programmiersprache umsetzen können, aber da dieses Artikels und am ehesten Ihrer Bewerbung JavaScript-basierten, ist es sinnvoll, JavaScript verwenden.

• Sowohl der Client-oder Server-Side-Implementierungen oder Prüfungen sollten immer noch keine Abhängigkeiten zueinander. Auf diese Weise können Sie ersetzen die Client-Tests mit der Client-Implementierung ohne Probleme in die falsche URL-Schicht-oder Server-Implementierung.1-4.Testing eine dynamische VertragDas obige Beispiel, die, wie man einen Vertrag erstellen, illustriert, erstreckte sich nicht auf den dynamischen Aspekt des Auftrags und das Problem der Umleitung im Besonderen. Umleitung nicht betroffen sei, weil Umleitung ist ein Teil eines größeren Problems, dass ein Teil des Ajax und REST-Paradigma. Problem Sie wollen einen Vertrag, der dynamischen Prüfung ist. Lösung Der "Verständnis für die Definition und Philosophie des Ajax" Abschnitt wurde erklärt, dass Ajax ermöglicht Sie erstellen und bearbeiten Inhalte dynamisch. Die Dynamik erstreckt sich auf den Vertrag, der die folgenden Techniken mit einbezogen werden kann:

• Definition von einer bestimmten URL auf eine allgemeine URL-basiertes

• Definition spezifischer Inhalte auf der Grundlage einer bestimmten URL In jedem Beispiel ist eine allgemeine URL oder allgemeinen Inhalt Verweis hartcodierte oder in der Client-Seite verwiesen wird. Der hartcodierte allgemeinen Verweis wird dann in einen speziellen Verweis umgewandelt. Um zu verstehen, worum es geht, wollen wir auf dem Rechner Beispiel und die Umleitung Teil der zusätzlich Betrieb zu konzentrieren. Der folgende Code stellt die HTTP-Anfrage, dass der Kunde zusätzlich zu den allgemeinen Betrieb URL in einem bestimmten Betrieb Neben URL konvertieren machen würde: GET / services / calculatorrest / Operationen HTTP/1.1 User-Agent: Jakarta Commons-HttpClient/3.0 Host: 8100 Ein HTTP-GET ausgeführt wird, und die URL / services / calculatorrest / Operationen wird als mit dem HTTP 1.1-Protokoll. Dieser Teil des Antrags ist nicht erforderlich. Im Beispiel sind die HTTP-Header nicht erforderlich, sondern auf die Permutations14 Muster zu implementieren, wahrscheinlich die Header benötigt werden. Für diese Prüfung der geforderten Antwort lautet wie folgt:

HTTP/1.1 201 Umleiten + a + Benutzer Location: / services/calculatorrest/operations/2364564565

Die Antwort sieht ein wenig seltsam, weil der HTTP-Code 201 und nicht 307 oder 302, zurückgegeben. Für diejenigen Leser, die keine Ahnung, was die Antwort-Codes bedeuten haben, lassen Sie mich das klarstellen. Wenn Sie einen Antrag stellen und den Server will man das wirkliche temporären URL umzuleiten, dann benutzen Sie ein Antwort-Code in der Serie 3xx. Im Falle des Rechner-Programms ist die Umleitung für kurze Zeit, so viele Operationen hinaus durchgeführt werden konnte. Daher wäre die angemessene Reaktion entweder 307 oder 302. Dies ist jedoch nicht die richtige Antwort aus mehreren Gründen. Rückkehr entweder 307 oder 302 ist nicht richtig, in diesem Fall aus folgenden Gründen:

• Der Browser ermöglicht die Umleitung automatisch und somit nicht geben, das XMLHttpRequest-Objekt der URL umgeleitet.

• Doing eine automatische Umleitung ist nicht sinnvoll, da Sie sie möglicherweise mehrere Abfragen auszuführen und möchte nicht mehrere Umleitungen durchführen.

• Wenn Sie eine Anfrage an die Basis-URL, du bist nicht dabei eine Weiterleitung an eine bekannte Ressource, sondern die Schaffung einer Ressource, die Sie brauchen, um zu lenken. Im World Wide Web Consortium (W3C) HTTP 1.1-Spezifikation, die 201 Antwort Code wird verwendet, um anzuzeigen, dass das Aufrufen der ursprünglichen URL eine neue Ressource, die auf die neue URL, die in der Lage HTTP-Header definiert wird verwiesen werden kann geschaffen hat. Deshalb, auch wenn Sie genutzt haben könnte 307 oder 302, die besser geeignete Antwort 201 ist. Von einer Umsetzung Perspektive, die Kennung 2364564565 werden dynamisch generiert und kann nicht vorhergesagt werden. Von einem Test Sicht ist dies ein Problem, weil du nicht schreiben können, ein Test für die Kennung 2364564565. Wenn Sie das tun, dann würden Sie den Grundsatz der gegen zu können, die falsche URL-Layer für eine Server-Implementierung zu ersetzen. Der Grund dafür ist, weil die Client-Test eine spezifische Kennung, dass die Server-Implementierung nicht kann, sollte noch erzeugen erwarten würde. Die Lösung ist nicht für eine bestimmte Kennung Test, sondern um die Existenz und das Format der Kennung Test, wie dargestellt durch den folgenden Test.

 Quelle: / Jaxson / trunk / website / ROOT / Rechner / testcontract.html var baseURL = "/ services / calculatorrest / operations"; var entityURL = "";testVerifyRedirection: function () (var request = new Synchron (); request.complete = function (statusCode, statusText, responseText, responseXML) (if (statusCode! = 201) (fail ( "Expected 201 erhalten" + statusCode);) entityURL = this._xmlhttp.getResponseHeader ( "Location"); if (entityURL == null | | entityURL.length <= baseURL.length) ( fail ( "Weitergeleitet URL cannot be null"); )info ( "testVerifyRedirection", ist "Weitergeleitet URL (" + + entityURL ")"); testManager.success ( "urltest");) request.GET (baseURL);)

 

Bei der Prüfung, die hartcodierte Referenz-URL wird in der Variablen baseURL gespeichert. Die dynamisch erstellten URL wird in der Variablen gespeichert entityURL, die zugeordnet ist ein leerer String. Der Test testVerifyRedirection hat einen einzigen Zweck, und dass auf die Forderung des hartcodierte allgemein wird. Aufrufen der hartcodierte allgemeinen Hinweis gibt die spezifische dynamische Verweisung. Um den Vertrag zu implementieren, müssen Sie testen, zwei Dinge. Die erste ist die Rückkehr der Status-Code 201, und die zweite ist die Erzeugung der Kennung. Prüfung für die Status-Code 201 ist einfach und erfordert eine Entscheidung. Testing für die dynamische Identifier ist ein wenig komplizierter, aber das Konzept in den Test gemacht ist einfach. Der Test besteht aus zwei Prüfungen, die Existenz der dynamisch generierten Kennung Test. Die beiden Prüfungen sind die beiden untersten Schichten der Prüfung eine dynamische Kennung. Im Folgenden werden die Überprüfungen von den niedrigsten bis zur höchsten Ebene der Überprüfbarkeit:

Prüfung für die Existenz der Daten: In der Regel, Test für die Existenz ist ein null oder NotNullTest. Wenn der Test nicht null ist, bedeutet das nicht, dass die Daten korrekt sind, aber es hat zu überprüfen, dass es Daten. Der Test setzt voraus, dass die Daten die dynamische Kennung enthält.

Prüfung für die Existenz der Kennung in den Daten: Testen für die Existenz bedeutet zu wissen, über die Art der dynamischen Kennung. In der Regel, das heißt zu wissen, was die ursprünglichen Daten ist und wie der dynamisch generierten Daten erscheinen sollen.

Testen der Formatierung der dynamisch generierten Kennung: Testen der Formatierung bedeutet zu wissen, etwas über das Format des Bezeichners. Dies könnte bedeuten, zu wissen, dass die Kennung numerisch ist, eine bestimmte Länge, oder müssen bestimmte Zeichen enthalten. Der Rechner Beispiel funktioniert nicht für die korrekte Formatierung der dynamisch generierten Kennung Test, aber wenn es hätte, würde der Test wurden length-Basis und numerisch basiert. Seien Sie vorsichtig, wenn Sie die Formatierung, wie die dynamische Erzeugung von temporären Daten könnten Wechsel von einer Version zur nächsten. Bei der Prüfung dynamischer Daten, starten auf der untersten Ebene und führen die Tests inkrementell. Don't start auf höchster Ebene von Anfang an. Dadurch stehen auch eine gefährliche Annahme, dass die dynamischen Daten vorhanden sind. Zum Beispiel, wenn Sie nur Test für korrekte Formatierung, werden Sie nicht in der Lage, zwischen den Test-Pleite vom fehlenden dynamischen Daten und falsch formatiert dynamische Daten zu erkennen. Der folgende Code zeigt eine Java-Implementierung des URL-Umleitung:

public class RedirectionImplementation erstreckt MockUrlTestCaseBase (public class RedirectionImplementation erstreckt MockUrlTestCaseBase (public void processRequest (HttpServletRequest request, HttpServletResponse response) ( this.generateRedirection (response, 201, request.getRequestURI () + "/ 2364564565");))

Der kühne Code veranschaulicht, wie die Umleitung implementiert ist. Beachten Sie, dass die dynamische Kennung ist hart codiert. Es gibt keine Logik. Wenn der gleiche Client die Umleitung mehrfach genannt wird, würde es die gleiche Kennung. Dies scheint eine Verletzung des Vertrages, doch ist es nicht eine Verletzung. Der Vertrag für den Rechner sagt, daß zu einer Ressource umleiten, die Sie verwenden können, um eine Berechnung durchführen. Der Kunde kann keine Annahmen, aber der Server kann, weil der Server die Kontrolle über die dynamische Erzeugung von Identifikatoren. Um die Tabelle wieder, wenn der Kunde die Verantwortung dafür, die dynamische Kennung definieren, dann verwendet der Server hat, muß die dynamische Kennung des Clients anzunehmen und zu nutzen für Mock URL Zwecke. Sie können die dynamische Kennung dynamisch zu generieren, aber wie soll man testen Sie die Richtigkeit der Vertrag? Dies geht zurück auf das Problem im vorigen Abschnitt dargestellt, die sagte die falsche URL Schicht hat eine doppelte Funktion zu definieren, was der Vertrag aussehen muss. Wenn die falsche URL-Logik-Schicht, die in der Server-Implementierung wiederverwendet wird, dann enthält die Richtigkeit Problem bestehen kann. Wenn Sie also Vielfalt in dynamischen Identifikatoren müssen, erstellen Sie ein paar von ihnen und verwenden Sie dann eine Zufallszahl Algorithmus, um von ihnen zu wählen. Bei der Prüfung dynamischer Verträge, folgende Punkte zu beachten:

• herauszufinden, wer für die Generierung der dynamischen Daten verantwortlich ist und wer verbraucht die dynamischen Daten.

• Der Generator von dynamischen Daten können bestimmte Testfälle zu definieren und Annahmen treffen, wie die Daten formatiert ist.

• Der Verbraucher der dynamischen Daten ist für die Entgegennahme der dynamischen Daten und Anwendung von drei Ebenen der Überprüfung bei der Überprüfung der Richtigkeit der Daten verantwortlich.

• Testfälle nicht immer die Unterstützung von dynamischen Daten. Zum Beispiel könnte der Anbieter nicht für eine Bezugnahme auf ein Datenformat. In diesem Fall muss der Generator der dynamischen Daten ein Fehler angezeigt, und der Verbraucher zu prüfen, ob eine Fehlermeldung generiert wird. Versuchen Sie nicht, mit Warnungen oder informative Meldungen einbinden können. Sie würde nie erwarten, einen Klempner, der weiß, wie ein abgebrochener Zahn zu beheben.

Ein Artikel eingereicht von Sonja Lande


Disclaimer:Unsere Website ist nicht verantwortlich für den Inhalt dieses Artikels. Webarticles ist eine kostenlose Informationsquelle.
Wichtig: Dieser Artikel "Dynamic Testing ein Vertrag mit Ajax" wurde durch ein automatisches Software übersetzt. Wir fühlen uns leid für alle Rechtschreibfehler, die möglicherweise aufgetreten sind. Vielen Dank für Ihr Verständnis.

Nicht ausgeführt

Online: 243 users browsing the articles directory