traceoutput">

Testando um contrato dinâmico com Ajax

Codificação do contrato por meio Test-Driven Development Técnicas

Codificação do contrato por meio ágil e test-drive de técnicas de desenvolvimento requer a escrever uma série de testes e aplicação de camada URL aMock. Problema Você quer o código do contrato, utilizando estas técnicas de desenvolvimento. Solução Para demonstrar, vamos definir um caso de uso, implementar o caso de uso como um contrato, escrever um caso de teste (s) para executar o contrato, aplicar o contrato no URL Mock e, finalmente, executar o teste. XMLHttpRequest O exemplo é baseado, como provavelmente vai ser XMLHttpRequest utiliza para fins de teste. No entanto, o contrato e URLs mock não estão integradas explicitamente no código de cliente ou servidor, de modo que você pode verificar qualquer cliente. Este artigo é sobre a construção de serviços Web, e você pode chamar serviços da Web por um cliente XMLHttpRequest, por um cliente mashup, ou por algum lado do servidor Web agregador de serviço. O exemplo apresenta uma aplicação da calculadora que contém apenas uma única operação utilizado para adicionar dois números juntos. O que torna a operação da calculadora original é que ele usa URLs temporária para manter um histórico de adições passado.

O caso de uso é a adição de dois números, mas duas coisas devem acontecer para realizar o caso de uso: redirecionamento e além. Os detalhes da gestão redirecionamentos não são aqui tratados, mas será abordado na próxima seção intitulada "Teste de um contrato dinâmico . "Como a URL temporária é determinada cai na categoria de pó mágico, por isso vamos focar os detalhes do contrato que faz a adição. O seguinte representa a solicitação HTTP usado para executar uma adição:

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

No pedido, um HTTP POST é executado, ea URL usada é a URL temporária encontrada no teste de redirecionamento. O cabeçalho HTTP Content-Type e Content-Length não são opcionais e são usados para definir o tipo e tamanho do conteúdo enviado com a solicitação POST. O corpo do pedido contém um buffer codificados usando JavaScript Object Notation (JSON) .13 Dois membros de dados estão definidos no pedido JSON: numero1 e numero2. Estes dois membros de dados representam os números a serem adicionados. A seguir mostra a resposta adequada:

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

O cabeçalho Content-Type e Content-Length descrever o conteúdo que é retornado, que é codificada utilizando JSON e contém um membro de dados único. O resultado único membro de dados é o resultado da adição de dois números juntos. Como você olhar para os pedidos e respostas e fazer alguma matemática mental, você saberá que a adição de 1 e 2 resulta na soma das 3. Do ponto de vista do contrato, parece que tudo está OK e que o sistema está implementado e funciona. Na realidade, porém, as conversas ilustradas HTTP eram todos falsos. Isso leva à seguinte questão: quando se desenvolve um contrato, como você define fisicamente o contrato? Um purista poderia dizer: "O contrato é definido usando algum tipo de ferramenta que o cliente eo servidor, em seguida, programadores implementar." A resposta purista soa bem e seria ótimo se existisse uma tal ferramenta. Infelizmente, nenhuma ferramenta permite que você projete REST HTTP baseado em conversas que possam servir como base do ensaio e da camada Mock URL. Confrontado com o fato de que você não tem essa ferramenta, usando um editor para gerar a conversa HTTP manualmente é extremamente suscetível a erros e tedioso. Eu não sugiro que ninguém deve fazer isso. No entanto, você ainda precisa definir um contrato, mas você não pode fazer isso sem uma ferramenta ou um editor. Sem qualquer tipo de documentação, o contrato continua a ser, literalmente, um produto da sua imaginação.

 Fonte: / Jaxson / trunk site / / root / scripts / templates / testcontract.html  Contrato Test Page 

Testes disponíveis

testManager.runAll () "Type =" button "value =" executar todos os testes "/>
Teste Status
testManager.testPrototype () "Type =" button "value =" Test Prototype "/> Não corra
hr / borda da tabela> = "1">

Saída Trace

O código é relativamente longa, então eu destaque as peças importantes para torná-lo mais simples de entender. O código de teste usa a marca de script para incluir um número de arquivos JavaScript que fornecem a base do código de teste. Depois de carregar o script de base, o primeiro pedaço de código destacou setJsUnitTracer redireciona as advertências geradas e informativos e mensagens de depuração para a página HTML atual. Especificamente, a saída é gerado no elemento da tabela com o traceoutput id, que é mostrado em negrito na parte inferior do código HTML.

O outro código-fonte em negrito é a variável baseURL, o que representa uma variável que referencia o contrato de URLs que serão utilizados no script de teste. É importante definir todos os URLs contrato nesta área, de modo que está claro quais URLs devem ser apoiados. Se um URL não pode ser determinada antes do tempo devido à sua natureza dinâmica, então você declarar uma variável e atribuir uma string vazia. As peças próxima do texto em negrito representam um testsToRun (variável) e uma função (testPrototype). TestPrototype A função é uma exemplo de como você poderia escrever um ensaio. Lembre-se destas duas medidas importantes: Use Synchronous, e chamar o método testManager.success. Síncrona é uma classe auxiliar que faz uma chamada XMLHttpRequest síncrona. Normalmente, em seus aplicativos que você usaria a classe assíncrona, o que faz chamadas assíncronas XMLHttpRequest. Vamos dar uma olhada nas diferenças entre as solicitações assíncronas e síncronas e discutir por que você escolher.

Quando XMLHttpRequest é usado para fazer uma solicitação síncrona, XMLHttpRequest aguarda uma resposta antes de retornar controle para o navegador. Tendo XMLHttpRequest esperar por uma resposta é um problema, pois o JavaScript não é multithread, fazendo com que o browser para bloquear. Para uma melhor experiência de usuário, você deve sempre usar solicitações assíncronas. Usando solicitações assíncronas tem seus próprios problemas. Um pedido assíncrono não esperar a resposta e controle retorna para o JavaScript. Quando os testes em execução, solicitações assíncronas são um problema porque os testes são executados seqüencialmente, não simultaneamente. Ao escrever código Ajax e REST, use a seguinte regra: use solicitações assíncronas para aplicações e usar pedidos de sincronização para o teste. Voltando ao testPrototype função exemplo, cada função de teste deve indicar ou não o teste foi bem sucedido.

Isto é necessário porque quando o gerente de teste é executado todos os testes, o próximo teste será executado apenas quando a corrente de teste foi bem sucedido. No exemplo, um sucesso é quando o testManager.success método é chamado. Chamar o método não indica uma falha, o método de espera e indica que o teste envolve várias etapas e precisa de esperar por uma resposta antes de determinar o sucesso ou fracasso. Prosseguindo, no exemplo o arquivo de código-fonte HTML, o método testManager.setTestCases associa o testes com o gerente de teste. O gerente de teste itera através de todos os ensaios definidos na testsToRun variável e cria um proxy que é um encapsulamento para o método definido originalmente. Você pode ler mais sobre isso no artigo 2. Quando os testes de funcionamento, não fazem referência a testsToRun variável, mas sim TestManager o gerente de teste variável. Após o ensaio setTestCases método gerente de completar a inicialização, você pode executar os testes. No código-fonte exemplo HTML, tabelas (

) São definidas dinamicamente para conter referências para os testes. A primeira tabela contém botões utilizados para executar os testes como um grupo ou individualmente. Para executar todos os testes, chame o método testManager.runAll (). Para executar um teste individual, execute o TestManager método. [Testname]. A segunda tabela é usada para gerar a saída de log.

Vamos primeiro teste o redirecionamento e além disso, como ilustra o seguinte trecho de código.

 Fonte: / Jaxson / trunk site / / root / calculadora / testcontract.html var entityURL = ""; testsToRun var = (testVerifyAdd: function () (info ( "testVerifyAdd", "Running testVerifyRedirection primeiro"); testsToRun.testVerifyRedirection (); info ( "testVerifyAdd", "Terminar execução testVerifyRedirection"); var estado = new Object (); state.number1 = 1; state.number2 = 2; var buffer = JSON.stringify estado (); info ( "testVerifyAdd", "JSON buffer ( "buffer + + ")"); var request = Synchronous novo (); resposta = function request.complete (statusCode, statusText, responseText, responseXML) (var = JSON.parse (responseText); info (" testVerifyAdd.complete "," Adicionar Resultado ( "+ + responseText ")"); assertEquals (" resultado JSON ", 3, response.result); testManager.success (addTest");) request.POST (entityURL, "application / json" , buffer, buffer.length);)); ... 

O trecho de código ilustra o código JavaScript que contém o teste, o trecho de código HTML e mostra como chamar o teste definido pelo JavaScript. As referências variável entityURL a URL contrato utilizado para executar uma adição. A variável não está atribuída uma URL pré-definida, porque o URL é criado dinamicamente em outro teste não ilustrado no trecho. Contida dentro da definição da testsToRun variável é uma função testVerifyAdd que representa o teste usado para executar uma adição. Para executar o teste, o gestor de chamadas de teste do TestManager método dinamicamente definido. TestVerifyAdd, que chama testsToRun.testVerifyAdd. O objetivo de criar um proxy para o teste é permitir que o gerente de teste para gerir o equipamento de teste que chama o teste. Na execução do testVerifyAdd, o teste não testVerifyRedirection ilustrado é chamado. O testVerifyRedirection executa a verificar que a referência será variável entityURL uma URL válida. Observe como o exame não ilustrada é referenciada usando a testsToRun variável e não TestManager.

Anteriormente, eu disse que você deve chamar TestManager para executar um teste, e não o teste diretamente. Essa regra só se aplica se você deseja executar um teste e já não estão executando um teste. A principal razão por que você não usaria TestManager é que, se uma exceção é gerada, você quer que o teste em execução no momento para sair. Chamar um teste usando TestManager resultados dentro de um teste na exceção de ser apanhado e ao teste corrente contínua, como se tudo correu bem. Evidentemente, isso não significa que você pode não desejar esse comportamento, e você poderia chamar um teste de TestManager. A escolha é sua, mas é mais importante entender a razão para chamar cada um. Tendo chamado a não-ilustrada testVerifyRedirection teste, o teste de uma adição já começou. O teste vai verificar que a adição de 1 e 2 resulta no valor de 3. Os dados são armazenados em um estado de instância de objeto de JavaScript que você instanciar e atribuir. Você serializar o estado do objeto para o formato JSON utilizando o método JSON.stringify.

Depois de converter o estado em um buffer de string, você o envia para o servidor usando o método request.POST. O request.POST método é uma solicitação HTTP POST, cumprindo os requisitos de descanso. Quando o método request.POST responde, o método é chamado request.complete. Na implementação do método anônimo request.complete, o buffer retornado é formatado usando JSON. Para converter o buffer JSON em um estado, você chamar o método JSON.parse. Você atribui o estado devolvido à variável resposta. O Estado contém o valor do acréscimo, eo valor é testada utilizando o método assertEquals. Se o valor não é 3, o framework de testes gatilhos, as capturas, e processos de uma exceção. Com qualquer exemplo, você pode ver que os testes foram bem sucedidos e que os testes falharam. Quando um teste falha, um erro diz por que o teste falhou. Além disso, mensagens informativas são gerados de modo que você sabe o que estão fazendo os testes e os dados que está sendo enviado. O teste é escrito como um único teste e não constitui um contrato de um teste completo. Quando você executar o cliente de testes lado de seu contrato, você vai querer empregar test-drive de técnicas de desenvolvimento que incluem testes que tiveram sucesso e os testes que falham. Agora vamos mudar o foco do lado do cliente para o servidor. Você não quer implementar um servidor de trabalho completa implementação do lado, mas sim aplicar a camada Mock URL.

Para o alcance desta solução, Java é usado. A finalidade da camada de URL Mock é imitar e implementar funcionalidade do servidor. Imitar e implementação de funcionalidade do servidor é complicado, porque você só pode aplicar alvo casos de teste. No caso do exemplo, que os meios de execução no caso da adição de 1 e 2. Claro, a adição de 1 e 2 é trivial, e no caso da URL Mock, você pode implementá-lo em segundos. No entanto, há casos mais complicados, pelo que não deverá ser tentada a oferecer uma solução. O foco da camada URL Mock é fornecer os pedidos e as respostas corretas para os testes específicos. Ao implementar a lógica, você está definindo-se de um erro porque a lógica deve ser testada. Vamos colocar da seguinte maneira: Imagine execução do trivial além de dois números. Como você sabe que sua implementação irá funcionar corretamente? A resposta é que você escreva testes. No entanto, isso não responder à pergunta corretamente, pois como você sabe que as provas sejam aplicadas corretamente? A resposta é que você não faz, e essa é a finalidade da camada de URL Mock. O código-fonte a seguir implementa o pedido ea resposta do suplemento contrato.

 Fonte: / jaxson.java.tests / devspace / Jaxson / tests / guias mockurl / DoMockAdd.java público classe DoMockAdd estende MockUrlTestCaseBase processRequest (void (HttpServletRequest request, HttpServletResponse response) throws ServletException ( pedido assertAreEqualJSONObject (, requestadd.json ");try ( FileWriter.writeFileObject ( "application / json", resposta, responseadd.json ");) Catch (Exception e) (throw new ServletException ( "Não foi possível gravar o arquivo de resposta", e);) response.setStatus (200);))

Duas chamadas de método são mostrados em negrito. O assertAreEqualJSONObject método compara os dados enviados armazenados pelo servlet Java para o requestadd.json arquivo. Se os dados enviados corresponde ao conteúdo do arquivo, então o writeFileObject próxima chamada método é executado. O objetivo do writeFileObject é enviar o conteúdo do arquivo responseadd.json para o cliente. O requestadd.json arquivos e responseadd.json representam contratos predefinida usada para somar dois números. DoMockAdd A classe não tem idéia do que o objectivo da operação é. Ele só sabe que, se o pedido corresponde a um arquivo, em seguida, uma resposta com base em outro arquivo é enviado. O Mock implementação da camada de URL é simples, mas só pode lidar com um único caso de adição de dois números específicos e gerando uma única resposta. No exemplo a camada Mock URL, você executa vários testes para ver qual caso de teste é correspondido. Se um caso de teste é correspondida, então a resposta apropriada é enviada. Se não houver casos de teste partidas, nenhuma resposta é enviada, e um erro é gerado.

O assertAreEqualJSONObject método compara os dados JSON que é enviada para os dados JSON em um arquivo. Não seja enganado em acreditar que um byte a byte comparação é realizada. O assertAreEqualJSONObject método executa uma comparação lógica com base no formato dos dados. Isto é importante porque, caso contrário, espaços ou outros caracteres que não influenciam o estado dos dados poderia causar um teste a falhar. Você não quer que um teste falhar por causa de uma formatação diferente, a menos que naturalmente você deseja testar uma formatação específica dos dados. Por exemplo, o XML é uma outra tecnologia que provavelmente você não quer espaço em branco para fazer o teste a falhar. Depois de ter criado o Mock camada de URL, você pode testar os scripts de cliente, que irá verificar os contratos. Baseado no trabalho do cliente e do servidor, subbing em um cliente de trabalho ou servidor de aplicação não deve mudar o comportamento. Se o comportamento é alterado, em seguida, os scripts de cliente de teste e implementações Mock URL são inconsistentes. Você quer que nem o cliente nem o servidor para saber se ele está correndo contra um ensaio ou de uma implementação real. Você deve se lembrar os seguintes pontos durante a criação de contratos:

• A camada de Mock URL representa o contrato definitivo entre o cliente eo servidor.

• A camada de Mock URL implementa os contratos de uso de arquivos pré-definidos para os pedidos e respostas.

• A camada de Mock URL só pode testar alvo de casos de teste e não deve utilizar qualquer código que será utilizado na execução, uma vez que a lógica pode ter erros.

• Ao comparar os dados enviados com os dados do arquivo, use uma comparação lógica e não um byte-a-byte comparação. Um byte-a-byte comparação poderia causar em branco, que nada tem a ver com o estado de um objeto, e faria um teste para falhar. A excepção a esta regra é se o teste requer uma verificação do espaço em branco.

• A camada de Mock URL executa vários testes em que a solicitação está sendo enviada e envia a resposta adequada. Na maioria dos casos, o pedido é testado usando um arquivo, ea resposta é baseado em outro arquivo.

• Se você deve implementar a lógica na camada de URL Mock, certifique-se que é extremamente bem testado e estável, enquanto que a aplicação irá servir como referência para a forma como o contrato entre o cliente eo servidor funciona.

• O cliente testes de lado que o contrato de ensaio representam uma aplicação de como utilizar o contrato e são utilizados para verificar a regularidade da execução do lado do servidor.

• Você desenvolve o cliente testes contrato lado e Mock camada URL em conjunto, utilizando técnicas de desenvolvimento testdriven.

• Você pode implementar o cliente de testes contrato lado em qualquer linguagem de programação, mas desde que este artigo e muito provavelmente a sua aplicação são baseadas em JavaScript, não faz sentido usar JavaScript.

• Nem o cliente nem o servidor implementações de lado ou testes devem sempre ter qualquer dependência entre si. Dessa forma, você pode substituir os testes de cliente com a implementação do cliente sem causar problemas na camada URL Mock ou implementação do servidor.1-4.Testing um contrato dinâmicoO exemplo anterior, o que ilustra como criar um contrato, não abrange o aspecto dinâmico do contrato e do problema de redirecionamento em particular. Redirecionamento não foi coberto porque redirecionamento é uma parte de um grande problema que faz parte do paradigma Ajax e REST. Problema Você deseja testar um contrato que é dinâmico. Solução A "Compreendendo o Conceito e Filosofia da seção Ajax", argumentou que o Ajax permite criar e manipular o conteúdo de forma dinâmica. O dinamismo se estende ao contrato, que pode envolver as seguintes técnicas:

• Definição de uma URL específica baseada em uma URL geral

• Definição de conteúdos específicos com base em um URL específico, quer por exemplo, uma URL ou referência geral de conteúdo geral é codificados ou referenciado no lado do cliente. O codificados referência geral é então convertido em uma referência específica. Para entender o que está envolvido, vamos nos concentrar no exemplo da calculadora e do redirecionamento de parte da operação de adição. O código a seguir representa a solicitação HTTP que o cliente faria para converter o URL funcionamento geral disso em um URL específico além operação: GET / serviços / calculatorrest / operações HTTP/1.1 User-Agent: Jakarta Commons-HttpClient/3.0 Host: localhost: serviços de 8100 um HTTP GET é executada, eo URL / calculatorrest / operações é chamado usando o protocolo HTTP 1.1. Essa parte do pedido é necessária. No exemplo, os cabeçalhos HTTP não são obrigados, mas para implementar o padrão Permutations14, os cabeçalhos mais prováveis são necessários. Para este teste, a resposta exigida é a seguinte:

HTTP/1.1 Redirecionando 201 + + um usuário Location: / services/calculatorrest/operations/2364564565

A resposta parece um pouco estranho, porque o código HTTP 201 e não 307 ou 302, é devolvido. Para aqueles leitores que não têm idéia do que significam os códigos de resposta, deixe-me esclarecer. Se você fizer um pedido, o servidor que você quer redirecionar para o URL real temporário, então você usa um código de resposta da série 3xx. No caso da aplicação da calculadora, o redirecionamento é temporário, como operações de adição muitos poderiam ser realizadas. Portanto, a resposta adequada seria ou 307 ou 302. No entanto, essa não é a resposta correta por razões várias. Retornando quer uma 307 ou 302 não é correto, neste caso, pelas seguintes razões:

• O navegador faz o redirecionamento automaticamente e assim não dá o objeto XMLHttpRequest a URL redirecionada.

• Fazer um redireccionamento automático não é útil, porque você pode querer executar várias consultas e não gostaria de realizar múltiplos redirecionamentos.

• Ao fazer um pedido a URL base, você não está fazendo um redirecionamento para um recurso conhecido, mas sim criar um recurso que você precisa redirecionar. In a World Wide Web Consortium (W3C) especificação HTTP 1.1, a resposta 201 código é usado para indicar que chamar a URL original foi criado um novo recurso que pode ser referenciado no novo URL, que é definido no cabeçalho HTTP Location. Portanto, mesmo que você poderia ter usado 307 ou 302, a resposta mais adequada é 201. De uma perspectiva de implementação, o identificador 2364564565 é gerado dinamicamente e não pode ser previsto. De uma perspectiva de análise, este é um problema porque você não pode escrever um teste para o identificador 2364564565. Se o fizesse, seria violar o princípio de ser capaz de substituir a camada de Mock URL para uma implementação do servidor. A razão é porque o teste do cliente seria de esperar um identificador específico que a implementação do servidor não pode, nem deve, gerar. A solução não é para testar um identificador específico, mas sim para testar a existência eo formato do identificador, como ilustrado pelo o seguinte teste.

 Fonte: / Jaxson / trunk site / / root / calculadora / testcontract.html var baseurl = "/ serviços / calculatorrest / operações"; var entityURL = "";testVerifyRedirection: function () (var pedido = Synchronous novo (); = function request.complete (statusCode, statusText, responseText, responseXML) (if (statusCode! = 201) (fail ( "201 Esperado recebido" + statusCode);) entityURL = this._xmlhttp.getResponseHeader ( "Location"); if (entityURL == null | | entityURL.length <= baseURL.length) ( fail ( "Ir URL não pode ser nulo"); )Info (testVerifyRedirection "," Ir a URL ( "+ + entityURL ")"); testManager.success (urltest");) request.GET (baseURL);)

 

No teste, o disco rígido-codificado referência de URL é armazenada no baseURL variável. A URL dinamicamente criado é armazenado na variável entityURL, que é atribuído uma seqüência vazia. O testVerifyRedirection teste tem uma única finalidade e que está a chamar os codificados referência geral. Chamando a referência codificados geral retorna a referência específica dinâmica. Para a execução do contrato, você deve testar duas coisas. A primeira é o retorno do código de status 201, eo segundo é a geração do identificador. Testes para o código de status 201 é simples e envolve uma decisão. Testing para o identificador dinâmica é um pouco mais complicado, mas a abordagem do teste é simples. O teste contém duas verificações para testar a existência do identificador gerado dinamicamente. As duas verificações são as duas camadas mais baixas de testar um identificador dinâmico. A seguir lista as verificações do mais baixo ao mais alto nível de verificabilidade:

Testes para a existência de dados: Normalmente, os testes para a existência é uma null ou notnullteste. Se o teste não é nulo, isso não significa que os dados estão corretos, mas faz verificar que não há dados. O teste pressupõe que os dados contém o identificador dinâmico.

Testes para a existência do identificador nos dados: Testar a existência significa saber sobre a natureza do identificador dinâmico. Normalmente, isso significa que saber o que os dados originais e como os dados gerados dinamicamente deve aparecer.

Testando a formatação do identificador gerado dinamicamente: Testando a formatação significa saber algo sobre o formato do identificador. Isto poderia significar, sabendo que o identificador é numérico, um determinado período, ou devem conter determinados caracteres. O exemplo a calculadora não teste para a formatação correta do identificador gerado dinamicamente, mas se tivesse, o teste teria sido baseada em comprimento e uma base numérica. Tenha cuidado ao testar para a formatação, como a geração dinâmica de dados temporária pode mudar de uma versão para outra. Quando o teste dinâmico de dados, começam no nível mais baixo e realizar os testes de forma incremental. Não comece no canto mais alto nível desde o início. Se o fizer, faz uma suposição perigosa que os dados dinâmicos existe. Por exemplo, se você testar apenas para a formatação correta, você não será capaz de discernir entre o teste falha da falta de dados dinâmicos e formatados incorretamente dados dinâmicos. O código a seguir ilustra uma implementação Java do redirecionamento de URL:

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

O código em negrito ilustra como o redirecionamento é executado. Observe que o identificador dinâmica é codificados. Não há lógica. Se o mesmo cliente, chamado de redirecionamento múltiplo vezes, ele receberia o mesmo identificador. Esta parece ser uma violação do contrato, no entanto, não é uma violação. O contrato para a calculadora diz para redirecionar para um recurso que você pode usar para executar um cálculo. O cliente não pode fazer suposições, mas o servidor pode, porque o servidor está no controle de geração de identificadores dinâmico. Para ativar a tabela, se o cliente tem a responsabilidade de definir o identificador dinâmico, em seguida, o servidor deve aceitar o identificador dinâmica do cliente e usá-lo para fins Mock URL. Você pode gerar o identificador de dinâmica de forma dinâmica, mas como você testar a regularidade do contrato? Isto vai voltar para o problema ilustrado na seção anterior, que disse que o Mock camada URL tem um duplo papel de definir o que o contrato tem a aparência. Se o URL Mock camada contém a lógica que é reutilizado na implementação do servidor, em seguida, uma correção problema pode existir. Portanto, se você tem de ter variedade de identificadores dinâmica, criar alguns deles e, em seguida, usar um algoritmo de números aleatórios para escolher entre eles. Quando o teste contratos dinâmicos, lembre-se os seguintes pontos:

Figura • quem é responsável por gerar os dados dinâmicos e quem consome os dados dinâmicos.

• O gerador de dados dinâmicos pode definir casos de teste específico e fazer suposições sobre como os dados são formatados.

• O consumidor dos dados dinâmicos é responsável por receber os dados dinâmicos e aplicação de três níveis de verificação ao verificar a exactidão dos dados.

• casos de teste nem sempre o apoio de dados dinâmica. Por exemplo, o provedor não pode apoiar uma referência feita a um formato de dados. Neste caso, o gerador de dados dinâmica deve gerar um erro, e que o consumidor deve verificar se um erro é gerado. Não tente acomodar com avisos ou mensagens informativas. Você nunca esperaria um encanador para saber como corrigir um dente quebrado.

um artigo submetido por Sonja Lande


Isenção de responsabilidade:O nosso site não se responsabiliza pelo conteúdo deste artigo. Webarticles é uma fonte de informação livre.
Importante: Este artigo "Testando um contrato dinâmico com Ajax" foi traduzida por um software automático. Nós sentimos muito por quaisquer erros de ortografia que pode ter ocorrido. Obrigado pela sua compreensão.

Não corra

Online: 266 users browsing the articles directory