traceoutput">

Prueba de un contrato dinámico con Ajax

La codificación del contrato a través de desarrollo basado en pruebas Técnicas

Codificación del contrato a través ágil y basado en pruebas técnicas de desarrollo de la escritura requiere una serie de pruebas y la aplicación de la capa de URL aMock. Problema que desea el código del contrato a través de estas técnicas de desarrollo. Solución Para demostrarlo, vamos a definir un caso de uso, poner en práctica el caso de uso como un contrato, escribir un caso de prueba (s) de ejecutar el contrato, ejecutar el contrato en la dirección Mock, y finalmente ejecutar la prueba. El ejemplo está basado en XMLHttpRequest, como es muy probable que esté utilizando XMLHttpRequest para propósitos de prueba. Sin embargo, el contrato y las URL de simulacros no están integrados de manera explícita en el código de cliente o servidor, de modo que usted puede comprobar cualquier cliente. Este artículo es sobre la construcción de servicios Web, y usted puede llamar a los servicios Web de un cliente de XMLHttpRequest, por un cliente mashup, o por algún lado del servidor agregador de servicios web. El ejemplo cuenta con una aplicación de calculadora que contiene sólo una única operación utilizado para añadir dos números. ¿Qué hace que la operación de la calculadora único es que utiliza direcciones URL temporal para mantener un historial de adiciones pasado.

El caso de uso es la suma de dos números, pero hay dos cosas deben pasar para llevar a cabo el caso de uso: la redirección y la adición. Los detalles del manejo de las redirecciones no están cubiertas aquí, pero se tratará en la siguiente sección titulada "Prueba de un contrato dinámico ". ¿Cómo se determina la dirección temporal cae en la categoría de polvo de hadas, así que vamos a concentrarnos en los detalles del contrato que realiza la adición. Lo siguiente representa la petición HTTP utilizado para realizar una adición:

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

En la solicitud, un HTTP POST se ejecuta, y la dirección utilizada es la dirección temporal en la prueba de la redirección. Las cabeceras HTTP Content-type y Content-Length no son opcionales y se utilizan para definir el tipo y la duración de los contenidos enviados con la solicitud POST. El cuerpo de la solicitud contiene un buffer codificados usando JavaScript Object Notation (JSON) .13 Dos miembros de datos se definen en la solicitud de JSON: número1 y número2. Estos dos miembros de los datos representan los números que se añade. A continuación se muestra la respuesta correcta:

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

Los encabezados Content-Type y Content-Length describir el contenido que se devuelve, que se codifica mediante JSON y contiene un miembro de datos. El único resultado miembro de datos es el resultado de sumar dos números. Cuando usted mira las solicitudes y las respuestas y hacer algunos cálculos mentales, usted sabrá que la adición de 1 y 2 resulta de la suma de 3. Desde la perspectiva del contrato, parece que todo está bien y que el sistema está implementado y funciona. En realidad, sin embargo, las conversaciones se ilustra HTTP eran falsos. Esto lleva a la siguiente pregunta: cuando el desarrollo de un contrato, ¿cómo se define físicamente el contrato? Un purista podría decir: "El contrato se define utilizando algún tipo de herramienta que el cliente y los programadores de servidor, a continuación poner en práctica." La respuesta purista suena bien y sería genial si esa herramienta existe. Desafortunadamente, no hay herramienta le permite diseñar basados en REST conversaciones HTTP que puede servir como base de la prueba y se burlan de la capa de URL. Ante el hecho de que usted no tiene esa herramienta, usando un editor para generar la conversación HTTP manualmente es muy propenso a errores y tedioso. No estoy sugiriendo que alguien debería hacer eso. Sin embargo, aún debe definir un contrato, pero no puede hacerlo sin una herramienta o un editor. Sin ningún tipo de documentación, el contrato sigue siendo, literalmente, un producto de su imaginación.

 Fuente: / Jaxson / trunk / web / root / scripts / templates / testcontract.html  Contrato de página de prueba 

Pruebas disponibles

testManager.runAll () "Type =" button "value =" ejecutar todas las pruebas "/>
Prueba Estatus
testManager.testPrototype () "Type =" button "value =" prueba del prototipo "/> No se ejecutan
/ hr> tabla border = "1">

Salida Trace

El código es relativamente larga, así que he puesto de relieve las piezas importantes para que sea más sencillo de entender. El código de prueba utiliza la etiqueta script para incluir una serie de archivos JavaScript que proporcionan la base del código de prueba. Después de cargar el script de base, la primera pieza de código de relieve setJsUnitTracer redirige las advertencias y de la información generada y mensajes de depuración en la página HTML. En concreto, la producción se genera en el elemento de la tabla con la traceoutput id, que se muestra en negrita en la parte inferior del código HTML.

El otro código fuente en negrita es la variable baseURL, lo que representa una variable que hace referencia a la URL de contrato que será utilizado en el script de prueba. Es importante definir todas las URL de contrato en esta zona de manera que es claro que las direcciones URL deben ser apoyadas. Si una URL no puede ser determinado de antemano por su naturaleza dinámica, se declara una variable y asignar una cadena vacía. Las piezas siguiente texto en negrita representan una variable (testsToRun) y una función (testPrototype). TestPrototype La función es una ejemplo de cómo se podría escribir un ensayo. Recuerde que estas dos medidas importantes: Uso síncrono, y llame a la testManager.success método. Síncrono es una clase de ayuda que realiza una llamada XMLHttpRequest síncrona. Normalmente, en las aplicaciones que usted utiliza la clase asíncrona, lo que hace llamadas asincrónicas XMLHttpRequest. Echemos un vistazo a las diferencias entre las solicitudes asincrónicas y sincrónicas y discutir por qué había elegir.

XMLHttpRequest cuando se utiliza para hacer una solicitud sincrónica, XMLHttpRequest espera una respuesta antes de devolver el control al navegador. Habiendo XMLHttpRequest esperar por una respuesta es un problema, porque JavaScript no es multiproceso, causando que el navegador de bloqueo. Para una mejor experiencia de usuario, usted debe utilizar siempre las solicitudes asincrónicas. Uso de las solicitudes asincrónicas tiene sus propios problemas. Una solicitud asincrónica no espera a la respuesta y el control vuelve a la de JavaScript. Cuando las pruebas de funcionamiento, las solicitudes asincrónicas son un problema porque las pruebas se ejecutan secuencialmente, no simultáneamente. Al escribir código Ajax y REST, utilice la siguiente regla: el uso solicitudes asincrónicas de las solicitudes, peticiones y el uso sincronizado de la prueba. Volviendo a la función testPrototype ejemplo, cada función de prueba se debe indicar si o no la prueba fue un éxito.

Esto es necesario porque cuando el director de pruebas ejecuta todas las pruebas, la próxima prueba se ejecutará sólo cuando la corriente de prueba fue un éxito. En el ejemplo, un éxito es cuando se llama al método testManager.success. La llamada al método no indica un fracaso, y el método de espera indica que la prueba consiste en varios pasos y tiene que esperar por una respuesta antes de determinar el éxito o el fracaso. Cambiando de tema, en el archivo de ejemplo de código fuente HTML, el método testManager.setTestCases asocia la pruebas con el director de pruebas. El director de pruebas recorre todas las pruebas definidas en la testsToRun variable y crea un proxy que es un método de encapsulación a la originalmente definidos. Puedes leer más sobre esto en el artículo 2. Cuando las pruebas de funcionamiento, no hagan referencia a la testsToRun variable, sino más bien el director de pruebas de TestManager variable. SetTestCases Después de que el método de prueba finalice la inicialización del administrador, puede ejecutar las pruebas. En el ejemplo del código fuente HTML, tablas (

) Se define de forma dinámica para contener referencias a las pruebas. El primer cuadro contiene botones que se utilizan para realizar las pruebas en grupo o individualmente. Para ejecutar todas las pruebas, llame a la testManager.runAll método (). Para ejecutar una prueba individual, ejecute el TestManager método. [TestName]. La segunda tabla se usa para generar la salida de la explotación forestal.

Vamos a la primera prueba de la reorientación y, además, como lo demuestra el siguiente fragmento de código.

 Fuente: / Jaxson / trunk / web / ROOT / calculadora / testcontract.html var entityURL = ""; testsToRun var = (testVerifyAdd: function () (info ( "testVerifyAdd", "Running testVerifyRedirection primero"); testsToRun.testVerifyRedirection (); información ( "testVerifyAdd", "acabar de correr testVerifyRedirection"); var state = new Object (); state.number1 = 1; state.number2 = 2; var buffer = JSON.stringify (estado); info ( "testVerifyAdd", "JSON de amortiguamiento ( "buffer + + ")"); petición var = síncrona nuevo (); respuesta request.complete = function (statusCode, statusText, responseText, responseXML) (var = JSON.parse (responseText); info (" testVerifyAdd.complete "," Añadir Resultados ( "+ + responseText ")"); assertEquals (" resultado JSON ", 3, response.result); testManager.success (" addTest ");) request.POST (entityURL," application / json " , buffer.Length, buffer);)); ... 

El fragmento de código muestra el código JavaScript que contiene la prueba, y el fragmento de código HTML muestra cómo llamar a la prueba definida por el código JavaScript. Las referencias a variables entityURL la dirección de contrato utilizado para realizar una adición. La variable no se le asigna una dirección predefinida, ya que la URL se crea dinámicamente en otra prueba, no se muestra en el fragmento. Contenida dentro de la definición de la testsToRun variable es una función testVerifyAdd que representa la prueba utilizada para realizar una adición. Para ejecutar la prueba, el director de pruebas de llamadas de la TestManager método dinámicamente definidos. TestVerifyAdd, que pide testsToRun.testVerifyAdd. El propósito de crear un proxy para la prueba es permitir que el director de pruebas para administrar el instrumento de prueba que exige la prueba. En la aplicación de testVerifyAdd, se llama testVerifyRedirection de ensayo no-ilustrada. El testVerifyRedirection ejecuta para comprobar que la variable de referencia se entityURL una URL válida. Observe cómo la prueba no se hace referencia se ilustra mediante la testsToRun variable y no TestManager.

Anteriormente, he dicho que usted debe llamar a TestManager realizar una prueba, y no la prueba directamente. Esa regla sólo se aplica si usted desea realizar una prueba y no se está ejecutando una prueba. La razón principal por la que no se usará TestManager es que si se genera una excepción, desea que la prueba está ejecutando actualmente para salir. Llamar a una prueba con TestManager resultados de la prueba dentro de una en la excepción de ser capturado y la corriente de prueba continua como si todo ha ido bien. Por supuesto, esto no significa que usted no desee este comportamiento, y que podríamos llamar una prueba de TestManager. La elección es suya, pero es más importante entender la razón de llamar a cada uno. Después de haber emplazado el no-ilustrada testVerifyRedirection prueba, la prueba de que ejecute una suma ha comenzado. La prueba se verificará que la adición de 1 y 2 los resultados en el valor de 3. Los datos se almacenan en una instancia de estado de los objetos de JavaScript que usted instancia y asignar. Serializar el estado del objeto al formato JSON utilizando el método de JSON.stringify.

Una vez que convertir al Estado en un búfer de cadena, lo envía al servidor usando el método de request.POST. El request.POST método es una petición HTTP POST, el cumplimiento de los requisitos de descanso. Cuando el método request.POST responde, el método se llama request.complete. En la implementación del método anónimo de request.complete, el buffer devuelto es formateado con JSON. Para convertir el buffer JSON en un estado, se llama al método JSON.parse. Se asigna el Estado volvió a la respuesta variable. El Estado contiene el valor de la adición y el valor se prueba utilizando el método de assertEquals. Si el valor no es 3, entonces el marco de pruebas desencadenantes, las capturas y los procesos de una excepción. Con cualquiera de ejemplo, se puede ver que las pruebas fueron exitosas y que las pruebas fracasaron. Cuando falla una prueba, un error de los estados razones por las cuales fracasaron. Además, los mensajes informativos se generan para que usted sepa lo que están haciendo las pruebas y qué datos está siendo enviado. La prueba se escribe como una sola prueba, y no constituye una prueba de contrato completo. Cuando se implementa el cliente de las pruebas de parte de su contrato, tendrá que emplear basado en pruebas técnicas de desarrollo que incluyen pruebas de que tienen éxito y las pruebas que no. Ahora vamos a desplazar el foco del lado del cliente para el servidor. Usted no desea implementar un servidor de trabajo completa implementación en tierra, sino más bien aplicar la capa de Mock URL.

Para el ámbito de aplicación de esta solución, Java se utiliza. El propósito de la capa de la dirección Mock es imitar y aplicar funcionalidad de servidor. Imitación y ejecución de funcionalidad de servidor es complicado, porque sólo se puede aplicar objetivo casos de prueba. En el caso del ejemplo, lo que significa la aplicación del caso de la adición de 1 y 2. Por supuesto, la adición de 1 y 2 es trivial, y en el caso de la dirección Mock, podría ponerlo en práctica en cuestión de segundos. Sin embargo, existen casos más complicados, así que no debería tener la tentación de dar una solución. El objetivo de la capa de la dirección Mock es proporcionar a las peticiones y las respuestas correctas para las pruebas específicas. Mediante la aplicación de la lógica, que está instalando para un error, porque la lógica tiene que ser probado. Digámoslo de esta manera: Imagina la aplicación de la adición trivial de dos números. ¿Cómo sabes que su aplicación funcione correctamente? La respuesta es que usted escribe ensayos. Sin embargo, que no responde a la pregunta correctamente, porque ¿cómo sabe que las pruebas se ejecutan correctamente? La respuesta es que no lo hace, y ese es el propósito de la capa de la dirección Mock. El siguiente código implementa la petición y la respuesta del complemento contrato.

 Fuente: / jaxson.java.tests / devspace / Jaxson / pruebas / / calculadora mockurl / DoMockAdd.java public class DoMockAdd extiende MockUrlTestCaseBase processRequest (public void (request, HttpServletResponse response) throws ServletException ( (assertAreEqualJSONObject petición, "requestadd.json");try ( FileWriter.writeFileObject ( "application / json", , la respuesta de "responseadd.json");) Catch (Exception e) (throw new ServletException ( "No se puede escribir el archivo de respuesta", e);) response.setStatus (200);))

Dos llamadas a métodos se muestran en negrita. El assertAreEqualJSONObject método compara los datos enviados almacenados por el servlet de Java a la requestadd.json archivo. Si los datos enviados coincide con el contenido del archivo, entonces el siguiente writeFileObject llamada al método se ejecuta. El propósito de writeFileObject es enviar el contenido del archivo responseadd.json al cliente. El requestadd.json archivos y responseadd.json representan los contratos previamente utilizado para sumar dos números. DoMockAdd La clase no tiene idea de cuál es el propósito de la operación. Sólo se sabe que si la solicitud coincide con un archivo, entonces una respuesta basada en otro archivo es enviado. La aplicación de la capa de URL Mock es simple, pero sólo puede tratar con un solo caso de sumar dos números específicos y generar una respuesta única. En el ejemplo de la capa de URL Mock, de realizar múltiples pruebas para ver qué casos de prueba es coincidente. Si se empareja un caso de prueba, a continuación, se envía la respuesta apropiada. Si no hay casos de prueba de los partidos, entonces no hay respuesta se envía y se genera un error.

El assertAreEqualJSONObject método compara los datos JSON que se envía a los datos JSON en un archivo. No se deje engañar en creer que un byte a byte de comparación se realiza. El assertAreEqualJSONObject método realiza una comparación lógica basada en el formato de los datos. Ello es importante porque de lo contrario, los espacios en blanco u otros caracteres que no influyen en el estado de los datos podría causar una prueba falle. Usted no quiere una prueba de no haber debido a un formato diferente, a menos que, por supuesto, usted desea probar un formato específico de los datos. Por ejemplo, el XML es otra tecnología que más probable es que no quieren un espacio en blanco para hacer que la prueba falle. Después de crear la capa de Mock URL, usted puede probar los scripts de cliente, que verificará los contratos. Sobre la base de trabajo del cliente y del servidor, que sustituía en un cliente de trabajo o la aplicación de servidor no debe cambiar el comportamiento. Si se cambia el comportamiento, entonces el cliente de scripts de prueba y se burlan de las implementaciones de URL son inconsistentes. Usted quiere ni el cliente ni el servidor para saber si se está ejecutando en contra de una prueba o una aplicación real. Debe recordar los siguientes puntos cuando se crean los contratos:

• La capa de Mock URL representa el contrato definitivo entre el cliente y el servidor.

• La capa de Mock URL implementa los contratos de uso de archivos predefinidos para las solicitudes y respuestas.

• La capa de Mock URL sólo puede poner a prueba específica los casos de prueba y no deben utilizar ningún código que se utilizarán en la ejecución, ya que la lógica puede tener errores.

• Cuando se comparan los datos enviados con los datos en el archivo, utilice una comparación lógica y no un byte a byte de comparación. Un byte a byte de comparación podría causar un espacio en blanco, que no tiene nada que ver con el estado de un objeto, y provocaría una prueba falle. La excepción a esta regla es si la prueba requiere verificar el espacio en blanco.

• La capa de Mock URL lleva a cabo múltiples pruebas en las que se envía la solicitud y envía la respuesta apropiada. En la mayoría de los casos, la petición se comprueba utilizando un archivo, y la respuesta se basa en otro archivo.

• Si debe aplicar la lógica de la capa de la dirección Mock, asegúrese de que está muy bien probada y estable, ya que la aplicación servirá como referencia para la forma en que el contrato entre el cliente y funciones de servidor.

• El cliente de las pruebas de lado que el contrato de prueba representan una aplicación de cómo utilizar el contrato y se utilizan para verificar la exactitud de la aplicación de servidor lado.

• Desarrolla el cliente de las pruebas de contrato de lado y se burlan de la capa de dirección, junto con técnicas de desarrollo testdriven.

• Usted puede aplicar el cliente de las pruebas de contrato lado en cualquier lenguaje de programación, pero dado que este artículo y lo más probable su aplicación son basadas en JavaScript, tiene sentido utilizar JavaScript.

• Ni el cliente ni el servidor de implementaciones de lado o pruebas siempre deben tener las dependencias de uno al otro. De esta manera, puede sustituir las pruebas del cliente con la implementación del cliente sin causar problemas en la capa de la dirección Mock o aplicación de servidor.1-4.Testing un contrato dinámicoEn el ejemplo anterior, que ilustra cómo crear un contrato, no cubre el aspecto dinámico del contrato y el problema de la redirección en particular. Redirección no estaba cubierto por la redirección es una parte de un problema mayor que es parte del Ajax y del paradigma REST. Problema que desea poner a prueba un contrato que es dinámica. Solución El "Entendimiento de la Definición y Filosofía de la Ajax sección" sostuvo que el Ajax permite crear y manipular el contenido de forma dinámica. El dinamismo se extiende a los contratos, que pueden implicar las siguientes técnicas:

• Definición de una URL específica basada en una dirección general de

• Definición de contenidos específicos sobre la base de una URL específica en cualquiera de ejemplo, una dirección general o de referencia el contenido general es modificable o de referencia en el lado del cliente. El no modificable de referencia general se convierte entonces en una referencia específica. Para entender de qué se trata, vamos a centrarnos en el ejemplo de la calculadora y la parte de la reorientación de la operación de adición. El código siguiente representa la petición HTTP que el cliente se haría para convertir la dirección general de operación de adición en una operación específica, además URL: GET / servicios / calculatorrest operaciones de HTTP/1.1 User-Agent: Yakarta Commons-HttpClient/3.0 Host: localhost: servicios de 8100 GET de HTTP se ejecuta, y la dirección / / calculatorrest / operaciones se llama usando el protocolo HTTP 1.1. Esta parte de la solicitud es necesario. En el ejemplo, las cabeceras HTTP no son necesarios, pero para aplicar el modelo Permutations14, las cabeceras más probable es que se requieren. Para esta prueba, la respuesta requerida es la siguiente:

HTTP/1.1 201 Redirigir un usuario + + Location: / services/calculatorrest/operations/2364564565

La respuesta parece un poco extraño, porque el código HTTP 201, y no 307 o 302, se devuelve. Para aquellos lectores que no tienen idea de lo que los códigos de respuesta media, permítanme aclarar. Si usted hace una petición y el servidor quiere redireccionar a la dirección temporal real, entonces se utiliza un código de respuesta en la serie 3xx. En el caso de la aplicación de la calculadora, la redirección es temporal, ya que muchas operaciones de adición puede ser realizada. Por lo tanto, la respuesta adecuada sería ya sea 307 o 302. Sin embargo, esa no es la respuesta correcta por varias razones. Volviendo ya sea un 307 o 302 no es correcto en este caso por las siguientes razones:

• El navegador hace la redirección automática y por lo tanto no da el objeto XMLHttpRequest la URL redireccionada.

• Hacer una redirección automática no es útil, porque es posible que desee ejecutar varias consultas y no desea realizar cambios de dirección múltiple.

• Cuando haga una solicitud en la URL base, no estamos haciendo un redireccionamiento a un recurso conocido, sino más bien crear un recurso que usted necesita para redirigir el tráfico. En el World Wide Web Consortium (W3C), HTTP 1.1, la respuesta de 201 código se utiliza para indicar que llamar a la URL original ha creado un nuevo recurso que se puede hacer referencia a la nueva dirección URL, que se define en la cabecera HTTP Location. Por lo tanto, a pesar de que podría haber utilizado 307 o 302, la respuesta más apropiada es de 201. Desde la perspectiva de la aplicación, el identificador 2364564565 se genera de forma dinámica y no se pueden predecir. Desde la perspectiva de las pruebas, este es un problema porque no se puede escribir una prueba para la identificación 2364564565. Si tuviera que hacerlo, que te violan el principio de ser capaz de sustituir la capa de Mock URL de una aplicación de servidor. La razón es porque la prueba de cliente espera un identificador específico que la aplicación de servidor no puede ni debe generar. La solución no es a prueba de un identificador específico, sino para probar la existencia y el formato del identificador, como lo ilustra la siguiente prueba.

 Fuente: / Jaxson / trunk / web / ROOT / calculadora / testcontract.html var baseurl = "/ servicios / calculatorrest / operaciones"; entityURL var = "";testVerifyRedirection: function () (var request = síncrona nuevo (); request.complete = function (statusCode, statusText, responseText, responseXML) (if (statusCode! = 201) (error ( "201 previstos recibido" + statusCode);) entityURL = this._xmlhttp.getResponseHeader ( "Location"); if (entityURL == null | | entityURL.length <= baseURL.length) ( fail ( "Redirigido URL no puede ser nulo"); )info ( "testVerifyRedirection", "Saltar URL (" + + entityURL ")"); testManager.success ( "urltest");) request.GET (URL base);),

 

En la prueba, no modificable URL de referencia se almacena en la baseURL variable. La dirección URL creada dinámicamente se almacena en la variable entityURL, que se asigna una cadena vacía. La testVerifyRedirection prueba tiene un único objetivo y que es llamar a la no modificable de referencia general. Llamar a la referencia general no modificable devuelve la referencia dinámica específica. Para llevar a cabo el contrato, usted debe probar dos cosas. La primera es el regreso del código de estado 201, y la segunda es la generación del identificador. Las pruebas para el código de estado 201 es simple y consiste en una decisión. Identificador de ensayo para la dinámica es un poco más complicado, pero el enfoque adoptado en la prueba es simple. La prueba consta de dos verificaciones para comprobar la existencia del identificador generado dinámicamente. Los dos verificaciones son las dos capas más bajas de las pruebas de un identificador de dinámica. A continuación se enumeran las comprobaciones del nivel más bajo al más alto de la verificabilidad:

Pruebas de la existencia de los datos de: Por lo general, las pruebas de la existencia es una null o NOTNULLprueba. Si la prueba no es nula, ello no significa que los datos son correctos, pero comprueba que no hay datos. La prueba supone que los datos que contiene el identificador de dinámica.

Pruebas de la existencia de la identificación de los datos: Pruebas de la existencia significa saber acerca de la naturaleza de la identificación dinámica. Normalmente, eso significa saber lo que los datos originales y cómo los datos generados dinámicamente debe aparecer.

Prueba el formato del identificador generado dinámicamente: Probar el formato significa saber algo sobre el formato del identificador. Esto podría significar que a sabiendas de que el identificador es numérico, con una longitud determinada, o debe contener determinados caracteres. El ejemplo de la calculadora no realiza pruebas para el formato correcto del identificador generado de forma dinámica, pero si lo hubiera hecho, la prueba habría sido de longitud y de base de base numérica. Tenga cuidado en las pruebas para el formato, como la generación dinámica de datos temporal puede cambiar de una versión a otra. Cuando la prueba dinámica de datos, comience en el nivel más bajo y realizar las pruebas de forma incremental. No comience a la derecha más alto nivel desde el principio. Si lo hace, hace una peligrosa suposición de que los datos dinámico. Por ejemplo, si sólo pruebas para el formato correcto, usted no será capaz de discernir entre la falla en la prueba de falta de datos dinámico y un formato incorrecto de datos dinámico. El código siguiente ilustra una implementación de Java de la redirección de URL:

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

El código en negrita ilustra cómo se implementa la redirección. Observe que el identificador de dinámica no es modificable. No hay ninguna lógica. Si el mismo cliente llamado varias veces la redirección, recibiría el mismo identificador. Esto parece ser una violación del contrato, sin embargo, no es una violación. El contrato para la calculadora dice a redirigir a un recurso que puede utilizar para realizar un cálculo. El cliente no puede hacer suposiciones, pero el servidor no puede, porque el servidor está en el control de la generación de los identificadores dinámico. Para activar la tabla, si el cliente tiene la responsabilidad de definir el identificador de dinámica, el servidor debe aceptar el identificador dinámica desde el cliente y el uso para fines Mock URL. Usted podría generar el identificador dinámica dinámica, pero ¿cómo probar la la corrección del contrato? Esto se remonta a el problema se ilustra en la sección anterior, que dijo que la capa de Mock URL tiene un doble papel de definir lo que el contrato tiene que parecerse. Si la capa Mock URL contiene la lógica que se reutiliza en la implementación del servidor, y luego una corrección problema puede existir. Por tanto, si debe haber variedad en los identificadores dinámico, crear algunos de ellos y luego usar un algoritmo de números aleatorios para escoger entre ellos. Cuando la prueba dinámica de los contratos, recuerde los siguientes puntos:

• Figura quién es responsable de generar los datos dinámicos y que consume los datos dinámicos.

• El generador de datos dinámicos puede definir los casos específicos de ensayo y hacer suposiciones acerca del formato de los datos.

• El consumidor de los datos dinámicos se encarga de recibir los datos dinámicos y la aplicación de tres niveles de verificación de la hora de verificar la exactitud de los datos.

• Los casos de prueba no siempre el apoyo de datos dinámico. Por ejemplo, el proveedor no puede apoyar una referencia a un formato de datos. En este caso, el generador de los datos dinámicos debe generar un error, y el consumidor debe verificar que se genera un error. No intente acomodar con advertencias o mensajes informativos. Uno nunca esperaría que un fontanero para saber cómo solucionar un diente roto.

un artículo presentado por Sonja Lande


Descargo de responsabilidad:Nuestro sitio web no es responsable por el contenido de este artículo. Webarticles es un recurso de información gratuito.
Importante: Este artículo "Prueba de un contrato dinámico con Ajax" fue traducida por un software automático. Sentimos pena por los errores de ortografía que pueda haber ocurrido. Gracias por su comprensión.

No se ejecutan

Online: 467 users browsing the articles directory