Sperimentazione di un contratto con l'Ajax Dynamic
Codifica del contratto Utilizzo Test-Driven DevelopmentTecniche
Codifica il contratto con agili e test-driven tecniche di sviluppo richiede la scrittura di un numero di prove e di attuazione strato URL aMock. Problema Volete codice del contratto utilizzando queste tecniche di sviluppo. Soluzione Per dimostrare, Let's definire un caso d'uso, attuare il caso d'uso come un contratto, scrivere un banco di prova (s) per l'attuazione del contratto, l'attuazione del contratto di cui l'URL Mock, e, infine, l'esecuzione del test. XMLHttpRequest L'esempio è basato, come si vedrà molto probabilmente utilizzando XMLHttpRequest per i vostri scopi di testing. Tuttavia, il contratto e gli URL finta non sono integrati in modo esplicito nel codice client o server, in modo che si possa verificare qualsiasi client. Questo articolo è sulla costruzione di servizi Web, ed è possibile chiamare servizi Web da parte di un client XMLHttpRequest, da un client mashup, o da alcuni server-side aggregatore di Web service. L'esempio dispone di una calcolatrice che contiene solo una singola operazione utilizzato per aggiungere due numeri. Ciò che rende l'operazione di calcolatrice è il fatto che esso utilizza URL temporanea intesa a mantenere una storia di aggiunte passato.
Il caso d'uso è l'aggiunta di due numeri, ma due cose devono accadere per effettuare il caso d'uso: il reindirizzamento e oltre. I dettagli della gestione redirezioni, non sono coperti da qui, ma saranno coperti nel paragrafo successivo intitolato "sperimentazione di un contratto Dynamic . "Come l'URL temporanea è determinata rientra nella categoria di polvere pixie, in modo da lasciare che si concentrano sui dettagli del contratto che esegue l'aggiunta. Il seguente rappresenta la richiesta HTTP utilizzato per eseguire un'aggiunta:
POST / HTTP/1.1 Content services/calculatorrest/operations/2364564565-Type: application / json User-Agent: Jakarta Commons-HttpClient/3.0 Host: localhost: 8100 Content-Length: 25
Nella richiesta, un HTTP POST viene eseguito, e l'URL utilizzato è l'URL temporanee sono state trovate nella prova di reindirizzamento. Le intestazioni HTTP Content-Type e Content-Length non sono opzionali e sono usati per definire il tipo e la lunghezza del contenuto inviato con la richiesta POST. Il corpo della richiesta contiene un buffer codificati usando JavaScript Object Notation (JSON) .13 Due membri di dati sono definiti nella richiesta di JSON: number1 e number2. Questi due membri di dati rappresentano i numeri per essere aggiunto. Seguente mostra la risposta adeguata:
L'header Content-Type e Content-Length descrivere il contenuto che viene restituito, che è codificato usando JSON e contiene un solo membro di dati. Il risultato unico membro di dati è il risultato della somma di due numeri. Come si guardano le richieste e le risposte e fare un po 'di matematica mentale, saprete che l'aggiunta di 1 e 2 risultati per un importo di 3. Dal punto di vista del contratto, sembrerebbe che tutto sia OK e che il sistema è implementato e lavora. In realtà, però, il illustrata conversazioni HTTP erano tutti falsi. Questo porta alla seguente domanda: quando si sviluppa un contratto, come si fa a definire fisicamente il contratto? Un purista potrebbe dire: "Il contratto è definita attraverso una sorta di strumento che il client e server programmatori poi attuare." Purista La risposta suona bene e sarebbe bello se esistesse un tale strumento. Purtroppo, nessuno strumento consente di progettare REST-based conversazioni HTTP che può servire come base del test e Mock strato di URL. Di fronte al fatto che non si dispone di un simile strumento, utilizzando un editor per generare la conversazione HTTP manualmente è incredibilmente soggetta a errori e noioso. Non voglio dire che qualcuno dovrebbe farlo. Tuttavia, è ancora necessario definire un contratto, ma non si può fare a meno di uno strumento o un editor. Senza alcun tipo di documentazione, il contratto rimane letteralmente il frutto della vostra immaginazione.
Fonte: / jaxson / website / trunk / root / scripts / templates / testcontract.html Contratto pagina di prova
Disponibili prove
testManager.runAll () "Type =" button "value =" eseguire tutti i test "/>
Il codice è relativamente lungo, così ho messo in evidenza i pezzi importanti per rendere più semplice da capire. Il codice di prova utilizza il tag script per includere un numero di file JavaScript che forniscono la base del codice di test. Dopo aver caricato lo script di base, il primo pezzo di codice evidenziato setJsUnitTracer reindirizza gli avvisi generati e informativo e messaggi di debug alla pagina HTML corrente. In particolare, l'output è generato nell'elemento tabella con il traceoutput ID, che è indicato in grassetto nella parte inferiore del codice HTML.
L'altro codice sorgente in grassetto è la variabile baseURL, che rappresenta una variabile che fa riferimento alla URL del contratto che verrà utilizzato nello script di test. E 'importante definire tutti gli URL del contratto in questo settore, in modo che sia chiaro che gli URL devono essere sostenute. Se un URL non può essere determinata in anticipo a causa della sua natura dinamica, quindi si dichiara una variabile e assegnare una stringa vuota. I pezzi successiva di testo in grassetto rappresentano una variabile (testsToRun) e una funzione (testPrototype). TestPrototype La funzione è un esempio di come si potrebbe scrivere un saggio. Ricordate questi due passaggi importanti: Usa sincrono, e chiamare il metodo testManager.success. Sincrono è una classe di supporto che effettua una chiamata XMLHttpRequest sincrono. Normalmente, nelle applicazioni si usa la classe asincrona, il che rende le chiamate asincrone XMLHttpRequest. Diamo uno sguardo alle differenze tra le richieste asincrone e sincrone e discutere perché tu scegliere.
Quando XMLHttpRequest è usato per fare una richiesta sincrona, XMLHttpRequest attende una risposta, prima di restituire il controllo al browser. Dopo aver XMLHttpRequest attendere la risposta è un problema, perché Javascript non è multithread, causando il browser per bloccare. Per una migliore esperienza utente, si dovrebbe usare sempre le richieste asincrone. Utilizzando richieste asincrone ha i suoi problemi. Una richiesta asincrona non attendere la risposta e restituisce il controllo al JavaScript. Quando si eseguono i test, le richieste asincrone sono un problema perché i test sono eseguiti in sequenza, non contemporaneamente. Durante la scrittura di codice Ajax e REST, utilizzare la seguente regola: utilizzare richieste asincrone per le applicazioni, e l'uso richieste sincrone per le prove. Tornando al testPrototype funzione, ad esempio, ogni funzione di prova deve indicare se il test è stato positivo.
Questo è necessario perché quando il gestore del test viene eseguito tutti i test, il prossimo test verrà eseguito solo quando il test in corso ha avuto successo. In questo esempio, il successo è quando il testManager.success metodo viene chiamato. Chiamando il metodo non indica un errore, e il metodo di attesa indica che il test prevede più passaggi e le necessità di attendere una risposta, prima di determinare il successo o il fallimento. Passando, nell'esempio di file di codice sorgente HTML, il metodo testManager.setTestCases associa il prove con il gestore di prova. Il gestore di prova scorre tutte le prove definite nella testsToRun variabile e crea un proxy che è un incapsulamento al metodo originariamente definiti. Si può leggere di più su questo di cui all'articolo 2. Quando i test in esecuzione, non fanno riferimento alla testsToRun variabile, ma il direttore di prova testManager variabile. Dopo la setTestCases manager metodo di prova completa di inizializzazione, è possibile eseguire il test. Nel codice di esempio HTML, le tabelle (
) Sono definiti in modo dinamico per contenere riferimenti alle prove. La prima tabella contiene i pulsanti utilizzati per eseguire il test come un gruppo o singolarmente. Per eseguire tutte le prove, chiamare il metodo testManager.runAll (). Per eseguire un singolo test, eseguire il testManager metodo. [Nometest]. La seconda tabella viene utilizzato per generare l'output.
Primo test Let's il riorientamento e, inoltre, come illustrato dal seguente frammento di codice.
Fonte: / jaxson / website / trunk / ROOT / mutui / testcontract.html var entityURL = ""; testsToRun var = (testVerifyAdd: function () (info ( "testVerifyAdd", "Running testVerifyRedirection prima"); testsToRun.testVerifyRedirection (); info ( "testVerifyAdd", "Finishing esecuzione testVerifyRedirection"); stato var = new Object (); state.number1 = 1; state.number2 = 2; var buffer = JSON.stringify (stato); info ( "testVerifyAdd", "JSON Buffer ( "+ buffer + ")"); richiesta var = Synchronous new (); risposta request.complete = function (statusCode, statusText, responseText, responseXML) (var = JSON.parse (responseText); info (" testVerifyAdd.complete "," Aggiungi Risultato ( "+ + responseText ")"); assertEquals (" risultato JSON ", 3, response.result); testManager.success (" addTest ");) request.post (entityURL," application / json " , buffer.Length, buffer);)); ...
Non eseguire
Il frammento di codice illustra il codice JavaScript che contiene il test, e il frammento di codice HTML viene illustrato come chiamare il test definito dalla JavaScript. I riferimenti variabile entityURL l'URL di contratto utilizzato per eseguire un'addizione. La variabile non viene assegnato un URL predefinito, in quanto l'URL viene creata dinamicamente in un altro test non illustrato nel frammento. Contenute all'interno della definizione della testsToRun variabile è una funzione testVerifyAdd che rappresenta il test utilizzato per eseguire un'addizione. Per eseguire il test, il gestore di prova chiama il testManager dinamicamente definito metodo. TestVerifyAdd, che chiede testsToRun.testVerifyAdd. L'obiettivo di creare un proxy per il test è quello di consentire al gestore di prova per la gestione del test harness che chiama il test. Per l'attuazione del testVerifyAdd, il testVerifyRedirection non-illustrata test è chiamato. Il testVerifyRedirection esegue per verificare che la variabile di riferimento sarà entityURL un URL valido. Notate come il test non viene fatto riferimento illustrato utilizzando il testsToRun variabile e non testManager.
In precedenza, ho affermato che si dovrebbe chiamare testManager eseguire un test, e non la prova diretta. Che la regola generale si applica solo se si desidera eseguire un test e non sono già in corso un test. Il motivo principale per cui non si userebbe testManager è che se viene generata un'eccezione, si desidera che il test attualmente in uso per uscire. Chiamata di un test utilizzando testManager all'interno di un risultato di prova, ad eccezione di essere catturati e la prova di corrente continua, come se tutto è andato OK. Naturalmente, questo non significa che non si desidera questo comportamento, e si potrebbe definire un test da testManager. La scelta è vostra, ma è più importante capire la ragione per cui ciascuno di essi. Dopo aver invitato il non-illustrata testVerifyRedirection test, la prova di che esegue una addizione è iniziata. Il test sarà verificare che l'aggiunta di 1 e 2 risultati nel valore di 3. I dati sono memorizzati in uno stato di un'istanza di oggetto JavaScript che si istanzia e assegnare. Si serializzare lo stato dell'oggetto al formato JSON utilizzando il metodo JSON.stringify.
Una volta che si converte lo stato in un buffer di stringa, lo si invia al server utilizzando il metodo request.post. Request.post il metodo è una richiesta HTTP POST, che soddisfano i requisiti di riposo. Quando il metodo request.post risponde, il metodo request.complete viene chiamato. Per l'attuazione anonimo metodo di request.complete, il buffer restituito viene formattato con JSON. Per convertire il buffer JSON in uno stato, si chiama il metodo JSON.parse. Si assegna lo stato restituito alla risposta variabile. Lo stato contiene il valore della somma, e il valore si usa la assertEquals metodo. Se il valore non è 3, allora il quadro delle prove di trigger, le catture, e processi di un'eccezione. Con entrambi, ad esempio, si può vedere che i test hanno avuto successo e che i test fallito. Quando un test fallisce, uno degli Stati di errore perché il test fallito. Inoltre, i messaggi informativi vengono generati in modo da sapere cosa stanno facendo i test e quali dati vengono inviati. La prova è scritto come un solo esame e non costituiscono una prova completa del contratto. Quando si implementa il client-side test del vostro contratto, ti consigliamo di utilizzare test-driven tecniche di sviluppo che includono prove che riescono e delle prove che fallire. Ora spostare l'attenzione dal lato client sul lato server. Non si desidera implementare un server completa attuazione di terra di lavoro, ma piuttosto l'attuazione del livello Mock URL.
Per la portata di questa soluzione, Java viene usato. Lo scopo dello strato di Mock URL è quello di imitare e implementare funzionalità server-side. Imitando e l'attuazione di funzionalità server-side è difficile, perché si può soltanto attuare mirate casi di test. Nel caso dell'esempio, il che significa che attua il caso di aggiungere 1 e 2. Naturalmente, l'aggiunta di 1 e 2 è banale, e nel caso di URL Mock, è possibile attuarlo in pochi secondi. Tuttavia, ci sono casi più complicati, quindi non dovrebbe essere tentati di fornire una soluzione. L'attenzione dello strato di Mock URL è quello di fornire le richieste e le risposte corrette per i test specifici. Con l'implementazione di logica, stai impostando Preparatevi per un errore perché la logica deve essere provato. Mettiamola in questo modo: Immaginate di esecuzione banale l'aggiunta di due numeri. Come fai a sapere che la vostra applicazione funzionerà correttamente? La risposta è che la scrittura di test. Tuttavia, che non risponde correttamente alla domanda, perché come fai a sapere che i test siano applicate correttamente? La risposta è che non si fanno, e che è lo scopo dello strato di Mock URL. Il seguente codice sorgente implementa la richiesta e la risposta del componente aggiuntivo contratto.
Fonte: / jaxson.java.tests / devspace / jaxson / test / mockurl / mutui / DoMockAdd.java public class DoMockAdd estende MockUrlTestCaseBase (processRequest public void (HttpServletRequest req, HttpServletResponse response) throws ServletException ( richiesta (assertAreEqualJSONObject, "requestadd.json");try ( FileWriter.writeFileObject ( "application / json",, la risposta "responseadd.json");) Catch (Exception e) (throw new ServletException ( "Impossibile scrivere il file di risposta", e);) response.setStatus (200);))
Due chiamate di metodo sono evidenziate in grassetto. Il assertAreEqualJSONObject metodo confronta i dati inviati memorizzati dalla servlet Java per il requestadd.json file. Se i dati inviati corrisponde al contenuto del file, quindi il writeFileObject successiva chiamata al metodo viene eseguito. Lo scopo di writeFileObject è quella di inviare il contenuto del file responseadd.json al client. Il requestadd.json file e responseadd.json rappresentano contratti predefiniti utilizzati per aggiungere due numeri insieme. DoMockAdd La classe non ha idea di quale sia lo scopo dell'operazione è. Si sa solo che se la richiesta corrisponde a un file, quindi una risposta basata su un altro file viene inviato. L'attuazione Mock strato di URL è semplice, ma può trattare solo con un singolo caso di aggiungere due numeri specifici e generare una risposta unica. Nell'esempio Mock strato di URL, di eseguire più test per vedere qual caso test è abbinato. Se un banco di prova corrisponde, allora la risposta appropriata è stato inviato. Se non ci sono casi di test partite, allora nessuna risposta viene inviata, e viene generato un errore.
Il assertAreEqualJSONObject metodo confronta i dati JSON che viene inviato ai dati JSON in un file. Non essere indotto erroneamente a credere che un byte-per-byte confronto viene eseguito. Il assertAreEqualJSONObject metodo esegue un confronto logico in base al formato dei dati. Questo è importante perché in caso contrario, gli spazi o altri caratteri che non incidono sullo stato dei dati potrebbe causare un test a fallire. Non volete una prova non a causa di una formattazione diversa, a meno che naturalmente si desidera testare una formattazione specifica dei dati. Per esempio, XML è un'altra tecnologia, dove molto probabilmente non si desidera che gli spazi per causare il test di fallire. Dopo aver creato il livello Mock URL, è possibile testare gli script client, che verificherà i contratti. Sulla base del lavoro client e lato server, subbing in un client di lavoro o di implementazione di server non dovrebbe modificare il comportamento. Se il comportamento è cambiato, quindi il test script client e Mock implementazioni URL sono incoerenti. Si vuole né il client né il server per sapere se è in esecuzione nei confronti di un saggio o di un effettiva attuazione. Dovreste ricordare i seguenti punti durante la creazione di contratti:
• Il livello Mock URL rappresenta il contratto definitivo tra il client e server.
• Il livello Mock URL implementa i contratti di utilizzo dei file predefiniti per le richieste e le risposte.
• Il livello Mock URL può solo test mirati casi di test e non dovrebbe utilizzare qualsiasi codice che sarà utilizzato in attuazione, dal momento che la logica potrebbe avere bug.
• Quando si confrontano i dati inviati con i dati del file, utilizzare un confronto logico e non un byte di confronto a livello di byte. Un byte-per-byte confronto potrebbe causare spazi bianchi, che non ha nulla a che fare con lo stato di un oggetto, e causerebbe un test a fallire. L'eccezione a questa regola è se il test è necessario verificare gli spazi.
• Il livello Mock URL esegue più test in cui la domanda è stata inviata e invia la risposta appropriata. Nella maggior parte dei casi, la richiesta viene testato utilizzando un file, e la risposta è basata su un altro file.
• Se è necessario implementare la logica nello strato Mock URL, assicurarsi che sia molto ben testato e stabile, in quanto che l'attuazione servirà come riferimento per il modo in cui il contratto tra il cliente e le funzioni di server.
• Il client-side prove che il contratto di test rappresentano l'implementazione di modalità di utilizzo del contratto e vengono utilizzati per verificare la correttezza del server di attuazione di terra.
• È sviluppare il client-side e prove contratto Mock strato URL insieme usando tecniche di sviluppo testdriven.
• È possibile implementare il client-side prove contratto in qualsiasi linguaggio di programmazione, ma dal momento che questo articolo e molto probabilmente la vostra applicazione sono basata su JavaScript, ha senso utilizzare JavaScript.
• Né il client-server, né la Implementazioni lato o prove dovrebbe mai avere dipendenze su ogni altro. In questo modo, è possibile sostituire il test del cliente con l'applicazione client senza causare problemi a livello Mock URL o implementazione di server.1-4.Testing un contratto DynamicNell'esempio precedente, che ha illustrato come creare un contratto, non coprono l'aspetto dinamico del contratto e il problema del reindirizzamento in particolare. Reindirizzamento non era coperto, perché il reindirizzamento è una parte di un problema più grande che fa parte del Ajax e paradigma REST. Problema Si desidera di sperimentare un contratto che è dinamico. Solution ' "Intesa la definizione e la filosofia di Ajax sezione" ha sostenuto che permette Ajax di creare e manipolare i contenuti in modo dinamico. Il dinamismo si estende al contratto, che può coinvolgere le seguenti tecniche:
• Definizione di un URL specifico basato su un URL generale
• Definizione dei contenuti specifici basati su un URL specifico In entrambi, ad esempio, un URL generale o di contenuto generale di riferimento è l'hardcoded o riportati nel lato client. L'hard-coded di riferimento generale, viene poi convertito in un riferimento specifico. Per capire che cosa si tratta, let's focus sui esempio mutui e la parte di reindirizzamento l'operazione di addizione. Il codice seguente rappresenta la richiesta HTTP che il client renderebbe per convertire l'URL generale operazione di addizione in un URL specifico operazione di addizione: GET / servizi / calculatorrest / operazioni HTTP/1.1 User-Agent: Jakarta Commons-HttpClient/3.0 Host: localhost: 8.100 servizi HTTP GET viene eseguito, e l'URL / / calculatorrest / operazioni viene chiamato usando il protocollo HTTP 1.1. Questa parte della richiesta è obbligatorio. Nell'esempio, le intestazioni HTTP non sono obbligatori, ma per l'attuazione del modello Permutations14, le intestazioni più probabili sono necessari. Per questo test, la risposta richiesta è la seguente:
HTTP/1.1 201 Reindirizzare un utente + + Location: / services/calculatorrest/operations/2364564565
La risposta sembra un po 'strano, perché il codice HTTP 201 e non 307 o 302, viene restituito. Per quei lettori che non hanno idea di ciò che i codici di risposta media, mi permetta di chiarire. Se si effettua una richiesta e il server vuole reindirizzare l'utente verso l'URL reale temporanea, poi si utilizza un codice di risposta della serie 3xx. Nel caso della domanda di mutui, il reindirizzamento è temporaneo, in quanto le operazioni Inoltre, molti potrebbe essere eseguita. Pertanto, la risposta adeguata dovrebbe essere 307 o 302. Tuttavia, che non è la risposta giusta per molteplici motivi. Tornando sia un 307 o 302 non è corretto in questo caso, per i seguenti motivi:
• Il browser permette il reindirizzamento automatico e quindi non dare l'oggetto XMLHttpRequest l'URL di reindirizzamento.
• Effettuare un reindirizzamento automatico non è utile, perché può essere utile per eseguire le query multiple e non desidera eseguire redirezioni multiple.
• Quando si effettua una richiesta per l'URL di base, non stai facendo un redirect a una risorsa conosciuta, ma piuttosto la creazione di una risorsa che è necessario effettuare il reindirizzamento. Nel World Wide Web Consortium (W3C) specifiche HTTP 1.1, la risposta 201 il codice viene usato per indicare che la chiamata l'URL originale ha creato una nuova risorsa che è possibile fare riferimento al nuovo URL, che è definita nell'intestazione Location HTTP. Pertanto, anche se si potrebbe avere utilizzato 307 o 302, la risposta più appropriata è 201. Da una prospettiva di attuazione, l'identificatore 2364564565 viene generata dinamicamente e non può essere previsto. Da una prospettiva di prova, questo è un problema perché non si può scrivere un test per l'identificatore 2364564565. Se si dovesse fare così, si sarebbe violato il principio di essere in grado di sostituire lo strato di Mock URL di un server di attuazione. La ragione è che il test del client si aspetta un identificativo specifico che l'implementazione di server non può, né deve generare. La soluzione non è quella di test per un identificatore specifico, ma piuttosto a verificare l'esistenza e il formato dei identificativo, come illustrato dal il test successivo.
Nel test, l'hard-coded URL di riferimento viene memorizzato nella variabile baseURL. Il creato dinamicamente URL è memorizzato nella variabile entityURL, che viene assegnata una stringa vuota. TestVerifyRedirection il test ha un unico scopo, e che consiste nel chiamare il hardcoded di riferimento generale. Chiamare il riferimento hard-coded generale restituisce il riferimento specifico dinamica. Per l'attuazione del contratto, si deve verificare due cose. Il primo è il ritorno del codice di stato 201, e la seconda è la generazione dei identificativo. Di prova per il codice di stato 201 è semplice e implica una decisione. Prova per l'identificazione dinamica è un po 'più complicata, ma l'approccio adottato per il test è semplice. Il test contiene due verifiche per testare l'esistenza del identificatore generato dinamicamente. Le due verifiche sono i due strati più bassi della prova di un identificatore di dinamica. Di seguito sono elencate le verifiche dal più basso al più alto livello di verificabilità:
• Di prova per l'esistenza di dati: In genere, le prove per l'esistenza è un null o notnullverifica. Se la prova non è nullo, questo non significa che i dati sono corretti, ma consente di verificare che non vi sono dati. Il test si assume che i dati contiene l'identificativo dinamica.
• Di prova per l'esistenza del identificatore nei dati: Test per l'esistenza significa conoscere la natura delle dinamiche identificativo. In genere, il che significa sapere che cosa i dati originali e come i dati generati in modo dinamico dovrebbe apparire.
• Prova la formattazione del identificatore generato dinamicamente: Test della formattazione significa conoscere qualcosa circa il formato del identificatore. Ciò potrebbe significare sapendo che è l'identificatore numerico, una certa lunghezza, e deve contenere alcuni caratteri. L'esempio mutui non prova per la corretta formattazione del identificatore generato in modo dinamico, ma se fosse, il test sarebbe stato basato su lunghezza e basata sui numeri. Prestare attenzione quando si prova per la formattazione, come la generazione dinamica di dati temporanei potrebbe passare da una versione all'altra. Durante la prova di dati dinamici, avviare al livello più basso ed eseguire i test in modo incrementale. Non avviare alla destra più alto livello dall'inizio. Se lo fate un presupposto pericoloso che i dati dinamici esiste. Ad esempio, se solo si prova per la formattazione corretta, non sarà in grado di discernere tra il fallimento di prova della mancanza di dati dinamici e formattato in modo errato i dati dinamici. Il seguente codice illustra una implementazione Java di reindirizzamento URL:
RedirectionImplementation public class MockUrlTestCaseBase (RedirectionImplementation public class MockUrlTestCaseBase (processRequest public void (HttpServletRequest req, HttpServletResponse response) ( this.generateRedirection (risposta, 201,request.getRequestURI () + "/ 2364564565");))
Il codice in grassetto illustra come il reindirizzamento viene attuato. Si noti che l'identificatore dinamica è hard-coded. Non vi è alcuna logica. Se lo stesso client chiama i tempi di reindirizzamento multiplo, che avrebbe ricevuto lo stesso identificatore. Questo sembra essere una violazione del contratto, ma non è una violazione. Il contratto per il calcolatore dice di reindirizzare a una risorsa che è possibile utilizzare per eseguire un calcolo. Il cliente non può fare ipotesi, ma il server è in grado, perché il server è in controllo di generare gli identificatori dinamici. Per attivare il tavolo, se il cliente ha la responsabilità di definire l'identificatore dinamica, quindi il server deve accettare l'identificatore dinamica da parte del cliente e di usarlo per fini Mock URL. Si potrebbe generare dinamicamente l'identificatore di dinamica, ma come si prova il la correttezza del contratto? Questo risale al problema illustrato nella sezione precedente, che ha detto che il livello di Mock URL ha una duplice funzione di definire ciò che il contratto deve assomigliare. Se il livello Mock URL contiene la logica che viene riutilizzata per l'attuazione del server, quindi una correttezza problema può esistere. Quindi, se è necessario disporre di varietà in identificatori dinamica, creare un paio di loro e quindi si utilizza un algoritmo di numeri casuali per scegliere tra di loro. Durante la prova di contratti dinamica, ricordare i seguenti punti:
• capire chi è responsabile di generare i dati dinamici e chi consuma i dati dinamici.
• Il generatore di dati dinamici possono definire i casi di test specifici e formulare ipotesi su come i dati vengono formattati.
• Il consumatore dei dati dinamica è responsabile per la ricezione dei dati dinamici e l'applicazione di tre livelli di verifica al momento di verificare la correttezza dei dati.
• casi di test non sempre il supporto di dati dinamici. Ad esempio, il provider non potrebbe sostenere un riferimento a un formato di dati. In questo caso, il generatore di dati dinamici deve generare un errore, e il consumatore deve verificare che viene generato un errore. Non tentare di accogliere con avvisi o messaggi informativi. Non hai mai si aspetterebbe un idraulico per sapere come risolvere un dente rotto.
un articolo presentato da Sonja Lande
Disclaimer:Il nostro sito non è responsabile per il contenuto di questo articolo. Webarticles è una risorsa gratuita di informazioni. Importante: Questo articolo "sperimentazione di un contratto con l'Ajax dinamico" è stato tradotto da un software automatico. Ci dispiace per eventuali errori di ortografia che possono essersi verificati. Grazie per la vostra comprensione.