traceoutput">

Expérimentation d'un contrat dynamique avec Ajax

Codage du marché au moyen de Test-Driven Development Techniques

Codage du marché au moyen de agile et piloté par les tests techniques de développement exige la rédaction d'un certain nombre de tests et de mise en œuvre de la couche aMock URL. Problème Vous voulez le code du marché au moyen de ces techniques de développement. Solution Pour le démontrer, nous allons définir un cas d'utilisation, mettre en œuvre le cas d'utilisation comme un contrat, rédiger un scénario de test (s) à exécuter le contrat, mettre en œuvre le contrat dans l'URL Mock, et enfin lancer le test. L'exemple est basé sur XMLHttpRequest, comme vous allez probablement utiliser XMLHttpRequest pour vos fins de tests. Toutefois, le contrat et les URL de fantaisie ne sont pas intégrées de manière explicite dans le client ou le code du serveur, de sorte que vous pouvez vérifier n'importe quel client. Cet article s'appuie sur les services Web, et vous pouvez appeler des services Web par un client de XMLHttpRequest, par un client mashup, ou par quelque côté serveur Web agrégateur de services. L'exemple comprend une calculatrice qui contient uniquement une seule opération sert à ajouter deux nombres ensemble. Ce qui rend l'opération simulateur unique, c'est qu'elle utilise des URL temporaires pour garder un historique des derniers ajouts.

Le cas d'utilisation est l'addition de deux nombres, mais deux choses doivent se produire pour réaliser les cas d'utilisation: la redirection et l'addition. Les détails de la gestion des redirections ne sont pas abordés ici mais seront couverts dans la section suivante intitulée «Expérimentation d'un contrat dynamique . "Comment l'URL temporaire est déterminée tombe dans la catégorie de la poussière de lutin, nous allons donc mettre l'accent sur les détails du contrat qui effectue l'addition. Ce qui suit représente la requête HTTP utilisé pour effectuer une addition:

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

Dans la demande, un HTTP POST est exécuté, et l'URL utilisée est l'URL temporaire a été trouvée dans le test de redirection. Les en-têtes HTTP Content-Type et Content-Length ne sont pas facultatifs et sont utilisés pour définir le type et la longueur du contenu envoyé avec la requête POST. Le corps de la requête contient une mémoire tampon encodés en utilisant JavaScript Object Notation (JSON) .13 Deux membres des données sont définies dans la demande JSON: nombre1 et nombre2. Ces deux membres de données représentent le nombre à ajouter. Ce qui suit montre la réponse appropriée:

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

Le contenu headers-Type et Content-Length décrire le contenu qui est retourné, ce qui est codé en utilisant JSON et contient un membre de données unique. Le résultat de données unique membre est le résultat de l'addition de deux nombres ensemble. Quand vous regardez les demandes et les réponses et faire un peu de calcul mental, vous savez que l'ajout de 1 et 2 se traduit par la somme de 3. Du point de vue du contrat, il semblerait que tout va bien et que le système est mis en œuvre et des œuvres. En réalité, toutefois, les conversations illustré HTTP étaient tous faux. Cela conduit à la question suivante: lors de l'élaboration d'un contrat, comment définissez-vous physiquement le contrat? Un puriste pourrait dire: «Le contrat est définie en utilisant une sorte d'outil que le client et le serveur de programmeurs mettent alors en œuvre." La réponse sonne bien puriste et serait formidable si un tel outil existe. Malheureusement, aucun outil vous permet de concevoir basé sur REST conversations HTTP qui peuvent servir de base de l'essai et Fausse couche URL. Confrontés au fait que vous ne disposez pas d'un tel outil, en utilisant un éditeur de générer la conversation HTTP manuellement est extrêmement sujette aux erreurs et fastidieux. Je ne suggère pas que quelqu'un devrait le faire. Cependant, vous avez encore besoin de définir un contrat, mais vous ne pouvez pas le faire sans un outil ou un éditeur. Sans aucune sorte de la documentation, le contrat reste littéralement le fruit de votre imagination.

 Source: / jaxson / trunk / site / root / scripts / templates / testcontract.html  Contrat page de test 

Tests disponibles

testManager.runAll () "Type =" button "value =" exécuter tous les tests "/>
Tester État
testManager.testPrototype () "Type =" button "value =" prototype de test "/> Pas courir
/ hr> table border = "1">

La sortie de trace

Le code est relativement long, alors je l'ai mis en évidence les éléments importants pour le rendre plus simple à comprendre. Le test du code utilise la balise script pour inclure un certain nombre de fichiers Javascript qui fournissent la base du code de test. Après avoir chargé le script de base, le premier morceau de code en surbrillance setJsUnitTracer redirige les avertissements générés et d'information et des messages de débogage dans la page HTML actuelle. Plus précisément, la sortie est générée à l'élément table avec les traceoutput id, ce qui est indiqué en gras au bas du code HTML.

L'autre code source en gras est la variable d'URL de base, ce qui représente une variable qui référence les adresses URL contrat qui sera utilisé dans le script de test. Il est important de définir toutes les URL des contrats dans ce domaine de sorte qu'il est clair que les URL doivent être pris en charge. Si une URL ne peut être déterminée à l'avance en raison de son caractère dynamique, vous déclarez une variable et d'assigner une chaîne vide. Les pièces suivante du texte en caractères gras représentent une testsToRun (variable) et une fonction (testPrototype). TestPrototype La fonction est un exemple de comment vous pourriez écrire un test. Se souvenir de ces deux étapes importantes: Utilisez synchrone, et appeler le testManager.success méthode. Synchrone est une classe utilitaire qui fait un appel synchrone XMLHttpRequest. Normalement, dans vos applications que vous voulez utiliser la classe asynchrone, ce qui rend les appels asynchrones XMLHttpRequest. Jetons un regard sur les différences entre les demandes asynchrones et synchrones et de discuter des raisons pour lesquelles vous souhaitez choisir.

Lorsque XMLHttpRequest est utilisé pour faire une demande synchrone, XMLHttpRequest attend une réponse avant de redonner la main au navigateur. Ayant XMLHttpRequest attendre une réponse est un problème, parce que JavaScript n'est pas multithread, provoquant le navigateur pour le verrouiller. Pour une meilleure expérience utilisateur, vous devriez toujours utiliser des requêtes asynchrones. Utilisation de requêtes asynchrones a ses propres problèmes. Une requête asynchrone n'attend pas la réponse et le contrôle retourne à la JavaScript. Lorsque les tests en cours d'exécution, les demandes asynchrones sont un problème parce que les tests sont exécutés de manière séquentielle, et non concurremment. Lorsque vous écrivez du code Ajax et REST, utiliser la règle empirique suivante: utiliser des requêtes asynchrones pour les applications, et utiliser les requêtes synchrones pour les essais. Pour en revenir à la testPrototype fonction d'exemple, chaque fonction d'essai doit indiquer si le test a réussi.

Ceci est nécessaire car lorsque le gestionnaire de test s'exécute tous les tests, le prochain test aura lieu uniquement lorsque le courant de test a réussi. Dans l'exemple, un succès est lorsque le testManager.success méthode est appelée. L'appel de la méthode a échoué indique un échec, et la méthode d'attente indique que l'essai comprend plusieurs étapes et a besoin d'attendre une réponse avant de déterminer le succès ou l'échec. Moving on, dans l'exemple de fichier source HTML de code, la méthode testManager.setTestCases associe le essais avec le gestionnaire de test. Le gestionnaire de test parcourt l'ensemble des tests définis dans la testsToRun variable et crée un proxy qui est une encapsulation de la méthode définie à l'origine. Vous pouvez en savoir plus à ce sujet dans l'article 2. Lorsque les tests en cours d'exécution, ne référencent pas le testsToRun variable, mais plutôt le gestionnaire de test TestManager variable. Après setTestCases gestionnaire de la méthode d'essai complète d'initialisation, vous pouvez exécuter les tests. Dans le code source HTML d'exemple, les tables (

) Sont définies de manière dynamique à contenir des références à des essais. Le premier tableau contient des boutons utilisés pour exécuter les tests en tant que groupe ou individuellement. Pour exécuter tous les tests, appelez la méthode testManager.runAll (). Pour exécuter un test individuel, exécutez la TestManager méthode. [NomTest]. Le deuxième tableau est utilisé pour générer la sortie de l'exploitation forestière.

Premier test Let's La réorientation et plus, comme l'illustre l'extrait de code suivant.

 Source: / jaxson / trunk / site / ROOT / calculator / testcontract.html var entityURL = ""; testsToRun var = (testVerifyAdd: function () (info ( "testVerifyAdd", "Running testVerifyRedirection premier"); testsToRun.testVerifyRedirection (); d'infos ( "testVerifyAdd", "Finishing exécutant testVerifyRedirection"); var state = new Object (); state.number1 = 1; state.number2 = 2; var tampon = JSON.stringify (state); info ( "testVerifyAdd", "JSON tampon ( "buffer + + ")"); var request = new synchrone (); réponse request.complete = function (statusCode, statusText, responseText, responseXML) (var = JSON.parse (responseText); info (" testVerifyAdd.complete "," Ajouter Résultat ( "+ + responseText ")"); assertEquals (" résultat JSON ", 3, response.result); testManager.success (" addTest ");) request.POST (entityURL," application / json " , buffer.Length, buffer);)), ... 

L'extrait de code illustre le code JavaScript qui contient l'épreuve, et l'extrait de code HTML montre comment appeler le test défini par le code JavaScript. Les références variable entityURL l'URL contrat utilisé pour effectuer une addition. La variable n'est pas attribué une URL prédéfinie, parce que l'URL est créée dynamiquement dans un autre test non illustré dans l'extrait. Contenus dans la définition de la testsToRun variable est une fonction testVerifyAdd qui représente le test utilisé pour effectuer une addition. Pour exécuter le test, le gestionnaire de test appelle la TestManager dynamiquement méthodologie définie. TestVerifyAdd, qui appelle testsToRun.testVerifyAdd. Le but de créer un proxy pour cette épreuve est de permettre au gestionnaire de test pour gérer le harnais de test qui demande le test. Dans la mise en œuvre de testVerifyAdd, le testVerifyRedirection pas illustrée en test est appelé. Le testVerifyRedirection s'exécute pour vérifier que la variable de référence sera entityURL une URL valide. Remarquez comment le test non illustré est référencé en utilisant les testsToRun variable et pas TestManager.

Plus tôt, j'ai dit que vous devez appeler TestManager pour exécuter un test, et non le test directement. Cette règle de base s'applique uniquement si vous souhaitez effectuer un test et ne sont pas déjà en cours d'un test. La raison principale pour laquelle vous ne seriez pas utiliser TestManager est que si une exception est générée, vous voulez le test en cours d'exécution pour quitter. Appel d'un test à l'aide dans un TestManager résultats des tests dans l'exception d'être pris et le test actuel continue comme si tout s'est bien passé. Bien sûr, cela ne signifie pas que vous ne voulez pas ce comportement, et vous pourriez appeler un test à partir TestManager. Le choix est vôtre, mais il est plus important de comprendre la raison pour appeler chacun. Après avoir invité le non-illustrées testVerifyRedirection test, le test d'effectuer un ajout a commencé. L'essai permettra de vérifier que l'ajout de 1 et 2 mène à la valeur de 3. Les données sont stockées dans un état de l'objet par exemple JavaScript que vous instancier et assignation. Vous sérialiser l'état de l'objet au format JSON en utilisant la méthode JSON.stringify.

Une fois que vous convertissez l'état dans une mémoire tampon de chaîne, vous l'envoyer au serveur en utilisant le request.POST méthode. Le request.POST méthode est une requête HTTP POST, répondant aux exigences de repos. Lorsque la méthode request.POST répond, la méthode request.complete est appelée. Dans l'implémentation de la méthode anonyme de request.complete, la mémoire tampon retournée est formaté en utilisant JSON. Pour convertir le tampon JSON dans un état, vous appelez la méthode JSON.parse. Vous attribuez l'état retourné à la réponse variable. L'état contient la valeur de l'addition, et la valeur est testée en utilisant la méthode assertEquals. Si la valeur n'est pas 3, puis le framework de test déclenche, des captures et les processus d'exception. Avec l'autre exemple, vous pouvez voir quels tests ont été positifs ainsi que les tests ont échoué. Lorsqu'un test échoue, un états d'erreur pourquoi le test a échoué. En outre, les messages d'information sont générés de sorte que vous savez ce que vos tests sont faites et ce que les données sont envoyées. Le test est écrit comme un seul test et ne constitue pas un test de marché complet. Lorsque vous mettez en place le client-tests côté de votre contrat, vous aurez envie d'employer piloté par les tests techniques de développement qui incluent des essais qui ont du succès et des essais qui échouent. Maintenant, nous allons changer le focus à partir du côté client pour le côté serveur. Vous ne voulez pas mettre en œuvre un serveur de travail complète implémentation côté, mais plutôt mettre en œuvre la couche Mock URL.

S'agissant de la portée de cette solution, Java est utilisé. Le but de la couche d'URL Mock est d'imiter et d'appliquer des fonctionnalités côté serveur. Imiter et de la mise en œuvre des fonctionnalités côté serveur est délicat, car on ne peut mettre en oeuvre ciblée des cas de test. Dans le cas de l'exemple, que signifie mettre en place le cas de l'ajout de 1 et 2. Bien sûr, l'addition de 1 et 2 est trivial, et dans le cas de l'URL Mock, vous pouvez le mettre en œuvre en quelques secondes. Toutefois, il existe des cas plus compliqués, vous ne devez pas être tenté d'apporter une solution. L'accent de la couche d'URL Mock est de fournir des demandes et des réponses correctes pour les tests spécifiques. En mettant en œuvre la logique, vous vous exposez-vous à une erreur parce que la logique doit être testé. Voyons-le de cette façon: Imaginez la mise en œuvre à l'ajout trivial de deux nombres. Comment savez-vous que votre application fonctionnera correctement? La réponse est que vous écrivez des tests. Toutefois, cela ne répond pas à la question correctement, car comment savez-vous que les tests soient mis en œuvre correctement? La réponse est que vous n'avez pas, et c'est le but de la couche d'URL Mock. Le code source suivant implémente la demande et la réponse de l'add contrat.

 Source: / jaxson.java.tests / Devspace / jaxson / tests / / simulateur mockurl / DoMockAdd.java public class DoMockAdd s'étend MockUrlTestCaseBase processRequest (public void (HttpServletRequest request, HttpServletResponse res) throws ServletException ( (assertAreEqualJSONObject demande, "requestadd.json");try ( FileWriter.writeFileObject ( "application / json", , la réponse "responseadd.json");) Catch (Exception e) (throw new ServletException ( "Impossible d'écrire le fichier de réponses", e);) response.setStatus (200);))

Deux appels de méthode sont indiquées en gras. Le assertAreEqualJSONObject méthode permet de comparer les données envoyées stockées par le servlet Java à la requestadd.json fichier. Si les données envoyées correspond au contenu du fichier, puis le writeFileObject prochain appel de méthode est exécutée. Le but de writeFileObject est d'envoyer le contenu de la responseadd.json fichier au client. Le requestadd.json fichiers et responseadd.json représentent des contrats prédéfini utilisé pour ajouter deux nombres ensemble. La classe DoMockAdd n'a aucune idée de quel est le but de l'opération. Il sait seulement que, si la demande correspond à un fichier, puis une réponse basée sur un autre fichier est envoyé. The Mock URL implémentation de la couche est simple, mais ne peuvent traiter qu'avec un seul cas d'addition de deux nombres spécifiques et générer une réponse unique. Dans l'exemple URL couche Mock, vous effectuez plusieurs tests pour voir quel cas de test est assorti. Si un cas de test correspondance n'est trouvée, la réponse appropriée est envoyé. Si aucun cas de test matchs, puis n'envoie pas de réponse, et une erreur est générée.

Le assertAreEqualJSONObject méthode permet de comparer les données JSON qui est envoyé aux données JSON dans un fichier. Ne soyez pas trompé en lui faisant croire qu'un octet à octet de comparaison est effectuée. Le assertAreEqualJSONObject méthode effectue une comparaison logique basé sur le format des données. Ceci est important parce que sinon, espaces ou autres caractères qui n'ont aucune influence sur l'état des données pourrait provoquer un échec du test. Vous ne voulez pas un test en raison d'un défaut de mise en forme différente, à moins bien sûr que vous désirez tester une mise en forme spécifique des données. Par exemple, le XML est une autre technologie, où la plupart probable que vous ne voulez pas d'espace pour causer l'échec du test. Après avoir créé la couche Mock URL, vous pouvez tester les scripts client, qui vérifiera les contrats. Basé sur le client de travail et côté serveur, ancrage dans un client de travail ou de l'application serveur ne devrait pas changer le comportement. Si le comportement est modifié, alors les scripts de test et faux implémentations client Web sont incompatibles. Vous voulez ni le client ni le serveur pour savoir si elle est ouverte contre un essai ou d'une mise en œuvre effective. Vous devriez vous rappeler les points suivants lors de la création de contrats:

• La couche Mock Web représente le contrat définitif entre le client et le serveur.

• La couche Mock Web met en oeuvre les contrats en utilisant des fichiers prédéfinis pour les demandes et les réponses.

• La couche Mock URL ne pouvez tester ciblé des cas de test et ne devrait pas utiliser n'importe quel code qui sera utilisé dans la mise en œuvre, puisque la logique pourrait avoir des bugs.

• Lorsque l'on compare les données envoyées avec les données dans le fichier, utilisez une comparaison logique et non pas un octet de comparaison octet. Un octet à octet de comparaison pourrait causer des espaces, qui n'a rien à voir avec l'état d'un objet, et entraînerait un échec du test. L'exception à cette règle si le test requiert la vérification de l'espace.

• La couche Mock URL effectue plusieurs tests à laquelle la demande est envoyée et envoie la réponse appropriée. Dans la plupart des cas, la demande est testé en utilisant un fichier, et la réponse est basé sur un autre fichier.

• Si vous devez implémenter la logique dans la couche Web Mock, assurez-vous que c'est extrêmement bien testés et stables, autant que l'application servira de référence pour la façon dont le contrat entre le client et les fonctions serveurs.

• Le client, tests comparatifs que le contrat de test représentent une mise en œuvre de la façon d'utiliser le contrat et sont utilisés pour vérifier l'exactitude de l'implémentation côté serveur.

• Vous développez la relation client-tests contrat côté et Mock couche URL ensemble en utilisant des techniques de développement testdriven.

• Vous pouvez mettre en œuvre les tests de contrat client-côte dans n'importe quel langage de programmation, mais depuis que cet article et probablement votre application sont à base de JavaScript, il est logique d'utiliser JavaScript.

• Ni le client ni le serveur implémentations côté ou de tests ne devrait jamais avoir toutes les dépendances sur les autres. De cette façon, vous pouvez remplacer les tests client avec la mise en œuvre du client sans causer de problèmes dans la couche Web Mock ou l'application serveur.1-4.Testing un contrat dynamiqueL'exemple précédent, qui nous montre comment créer un contrat, ne couvre pas l'aspect dynamique du marché et le problème d'une réorientation en particulier. Redirection n'était pas couvert, car la redirection est une partie d'un problème plus important qui fait partie de l'Ajax et le paradigme REST. Problème Vous voulez tester un contrat qui est dynamique. Solution La «Comprendre la définition et la Philosophie de l'Ajax" ont fait valoir que l'article Ajax permet de créer et de manipuler le contenu dynamiquement. Le dynamisme s'étend au contrat, qui peuvent impliquer des techniques suivantes:

• Définition d'une URL spécifique basée sur une URL générale

• Définition du contenu spécifique basée sur une URL spécifique Dans l'autre exemple, une URL ou des références générales contenu général est codé en dur ou référencés dans le côté client. Codée de manière irréversible référence générale est ensuite converti en une référence particulière. Pour comprendre ce qui est en cause, nous allons mettre l'accent sur l'exemple de la calculatrice et la partie réorientation de l'opération d'addition. Le code suivant représente la requête HTTP que le client serait de convertir le Web en général, outre l'exploitation d'une URL spécifique outre opérations: GET / services / calculatorrest / opérations HTTP/1.1 User-Agent: Jakarta Commons-HttpClient/3.0: localhost: 8100 Une des services HTTP GET est exécutée, et l'URL / / calculatorrest / opérations est appelé en utilisant le protocole HTTP 1.1. Cette partie de la demande est requise. Dans l'exemple, les en-têtes HTTP ne sont pas nécessaires, mais à mettre en œuvre le schéma Permutations14, les en-têtes les plus probables sont requis. Pour ce test, la réponse requise est la suivante:

HTTP/1.1 201 Redirection + un + utilisateur Lieu: / services/calculatorrest/operations/2364564565

La réponse semble un peu bizarre, parce que le code HTTP 201, et non pas 307 ou 302, est renvoyé. Pour les lecteurs qui n'ont aucune idée de ce que les codes de réponse moyen, permettez-moi de préciser. Si vous faites une requête et le serveur veut vous rediriger vers l'URL temporaire réel, alors vous utilisez un code de réponse dans la série 3xx. Dans le cas de la calculatrice, la redirection est temporaire, puisque les opérations d'addition de nombreux problèmes pouvaient être effectués. Par conséquent, la réponse appropriée serait soit 307 ou 302. Cependant, ce n'est pas la bonne réponse pour des raisons multiples. Scrutin soit un 307 ou 302 n'est pas correcte dans ce cas pour les raisons suivantes:

• Le navigateur permet la redirection automatique et ne donne donc pas l'objet XMLHttpRequest l'URL redirigée.

• Faire une redirection automatique n'est pas utile, parce que vous mai voulez exécuter plusieurs requêtes et ne voudraient pas d'effectuer des redirections multiples.

• Lorsque vous effectuez une requête sur l'URL de base, vous n'êtes pas faire une redirection vers une ressource connue, mais de créer une ressource que vous avez besoin de se rediriger vers. Dans le Consortium World Wide Web (W3C) spécification HTTP 1.1, la réponse 201 code est utilisé pour indiquer que l'appel de l'URL d'origine a créé une nouvelle ressource qui peut être référencée à la nouvelle URL, qui est défini dans l'en-tête HTTP Location. Par conséquent, même si vous avez pu utiliser 307 ou 302, la réponse la plus appropriée est 201. Du point de vue mise en œuvre, l'identificateur 2364564565 est généré dynamiquement et ne peut pas être prédit. Du point de vue d'essai, c'est un problème parce que vous ne pouvez pas écrire un test pour l'identifiant 2364564565. Si vous aviez à faire, vous violer le principe d'être en mesure de remplacer la couche Mock URL d'une application serveur. La raison est parce que le test client pourrait s'attendre à un identifiant spécifique que l'application serveur ne peut ni ne doit, de générer. La solution n'est pas de tester pour un identifiant spécifique, mais plutôt à tester l'existence et le format de l'identifiant, comme illustré par le test suivant.

 Source: / jaxson / trunk / site / ROOT / calculator / testcontract.html var baseurl = "/ services / calculatorrest / opérations»; entityURL var = "";testVerifyRedirection: function () (var request = new synchrone (); request.complete = function (statusCode, statusText, responseText, responseXML) (if (statusCode! = 201) (fail ( "Expected 201 reçu" + statusCode);) entityURL = this._xmlhttp.getResponseHeader ( "Location"); if (null == entityURL | | entityURL.length <= baseURL.length) ( fail ( "Redirigé URL ne peut pas être nul"); )info ( "testVerifyRedirection", "Redirigé URL est (" + + entityURL ")"); testManager.success ( "urltest");) request.GET (URL de base);),

 

Dans le test, le hard-codée de référence URL est stockée dans l'URL de base variable. L'URL dynamiquement créé est stocké dans la variable entityURL, qui est assignée une chaîne vide. Le testVerifyRedirection test a un seul but et c'est pour appeler les codée en dur de référence générale. Appel du général de référence codée en dur retourne la référence dynamique spécifique. Pour mettre en œuvre le contrat, vous devez vérifier deux choses. La première est le retour du code d'état 201, et la seconde est la génération de l'identifiant. D'essais pour le code d'état 201 est simple et requiert une décision. Essai de l'identifiant de dynamique est un peu plus compliquée, mais l'approche adoptée dans le test est simple. L'essai comporte deux vérifications pour tester l'existence de l'identifiant généré dynamiquement. Les deux vérifications sont les deux plus basses couches de l'essai d'un identificateur dynamique. Voici la liste des vérifications des plus bas au plus haut niveau de vérifiabilité:

Test de l'existence des données: En règle générale, les essais de l'existence est un null ou NotNulltester. Si le test n'est pas nul, cela ne signifie pas que les données sont correctes, mais il ne vérifie qu'il existe des données. Le test suppose que les données contient l'identifiant dynamique.

Test de l'existence de l'identifiant dans les données: Test de l'existence signifie savoir sur la nature de l'identificateur dynamique. Typiquement, cela signifie savoir ce que les données d'origine et comment les données générées dynamiquement devrait apparaître.

Test de la mise en forme de l'identifiant généré dynamiquement: Test de la mise en forme, c'est savoir quelque chose sur le format de l'identificateur. Cela pourrait signifier en sachant que l'identifiant est numérique, une certaine longueur, ou doit contenir certains caractères. L'exemple le simulateur ne teste pas pour la mise en forme correcte de l'identifiant généré dynamiquement, mais si elle avait fait, le test aurait été basé sur la longueur et numériquement en fonction. Soyez prudent lors de l'essai pour la mise en forme, alors que la génération dynamique des données temporaire pourrait passer d'une version à l'autre. Lors de l'essai dynamique de données, commencez au niveau le plus bas et effectuent les essais de manière incrémentielle. Ne commencez pas droit au plus haut niveau depuis le début. Faire fait si une hypothèse dangereuse que les données dynamique existe. Par exemple, si vous seul test pour le formatage correct, vous ne serez pas capables de discerner entre l'échec de l'essai de données manquantes dynamique et formaté de manière incorrecte les données dynamiques. Le code suivant illustre une implémentation Java de la redirection d'URL:

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

Le code en gras montre comment la redirection est mis en œuvre. Notez que l'identificateur dynamique est codée en dur. Il n'est pas logique. Si le même client appelle le temps de redirection multiples, il recevrait le même identifiant. Cela semble être une violation du contrat, ce n'est pourtant pas une violation. Le contrat pour le simulateur dit de se rediriger vers une ressource que vous pouvez utiliser pour effectuer un calcul. Le client ne peut faire des hypothèses, mais le serveur, car le serveur est en contrôle de générer les identifiants dynamique. Pour activer la table, si le client a la responsabilité de définir l'identificateur dynamique, alors le serveur doit accepter l'identifiant dynamique à partir du client et de l'utiliser à des fins Mock URL. Vous pouvez générer l'identificateur dynamique dynamiquement, mais comment voulez-vous tester la exactitude du contrat? Cela nous ramène au problème illustré dans la section précédente, qui a déclaré la couche Mock URL a une double mission de définir ce qu'est le contrat doit ressembler. Si la couche Mock URL contient la logique qui est réutilisé dans l'implémentation du serveur, puis une correction problème peut exister. Par conséquent, si vous devez avoir la variété dans les identificateurs dynamique, créer un peu d'entre eux, puis utiliser un algorithme de nombres aléatoires pour choisir entre elles. Lors des essais dynamiques des contrats, rappelez-vous les points suivants:

• Déterminez qui est chargé de produire les données dynamiques et qui consume les données dynamiques.

• Le générateur de données dynamiques peuvent définir des scénarios de test spécifiques et faire des hypothèses sur la façon dont les données sont formatées.

• Le consommateur de la dynamique des données est chargé de recevoir les données dynamiques et en appliquant trois niveaux de vérification lors de la vérification de l'exactitude des données.

• Les cas de tests ne favorisent pas toujours les données dynamiques. Par exemple, le prestataire peut-être pas favorable à une référence faite à un format de données. Dans ce cas, le générateur de la dynamique des données doit générer une erreur, et le consommateur doit vérifier si une erreur est générée. N'essayez pas de tenir compte des avertissements ou des messages d'information. Vous n'auriez jamais s'attendre à un plombier pour savoir comment réparer une dent cassée.

un article présenté par Sonja Lande


Disclaimer:Notre site n'est pas responsable du contenu de cet article. Webarticles est une ressource d'information gratuite.
Important: Cet article «Dynamic Test d'un contrat avec l'Ajax» a été traduit par un logiciel automatique. Nous nous sentons désolés pour les fautes d'orthographe que mai ont eu lieu. Nous vous remercions de votre compréhension.

Pas courir

Online: 406 users browsing the articles directory