Pergunta

Eu estou construindo um aplicativo que consulta um serviço web. Os dados no banco de dados varia e muda ao longo do tempo. Como faço para construir um teste de unidade para este tipo de aplicação?

O serviço web envia xml costas ou uma página de nenhum resultado de pesquisa html. Eu realmente não posso mudar o serviço web. Meu aplicativo basicamente consulta o serviço de web usando HttpURLConnection e obtém a resposta como uma String.

Espero que ajude com mais detalhes.

Foi útil?

Solução

Abstract o serviço web usando um proxy que você pode zombar fora. Tenha os seus diversos valores de simulação de retorno serviço web que representam casos de dados e de canto normais. simular também recebendo exceções do serviço web. Certifique-se de código funciona sob estas condições e você pode estar razoavelmente certo de que ele vai trabalhar com os valores das fontes de serviços web.

jMock para zombeteiro Java.

Outras dicas

A rigor de teste de unidade, você pode apenas unidades de teste que têm um comportamento determinístico .

Um teste que se conecta a um servidor Web externo é um teste de integração .

A solução é zombar do HttpURLConnection - isto é, criar uma classe em seus testes de unidade que deriva de HttpURLConnection classe e que retorna um codificado, ou um valor parametrizável. Editar : aviso isso pode ser feito maunally, sem qualquer estrutura de zombaria.

A classe que consulta o servidor web não deve instanciar o HttpURLConnection, mas recebê-la através de um parâmetro. Nos testes de unidade, você cria o HTTPURLConnectionMock, e passa para a classe que interroga o servidor web que irá usá-lo como ele está usando um HttpURLConnection real. No código de produção, você cria um HttpURLConnection real e passá-lo para a classe.

Você também pode fazer o seu HTTPURLConnectionMock capaz de lançar uma IOException, às condições Erro de teste . Basta ter um método para dizer que não devolver o resultado, mas uma exceção no próximo pedido.

A sua pergunta é um pouco aberto, mas há definitivamente algumas opções testáveis ??apenas usando as informações acima:

  1. Você pode testar se a consulta funciona em tudo. Assert que você deve voltar a / não-nulo conjunto de resultados não-vazia.
  2. Você pode testar se os resultados da consulta é uma válido Resultado set. Assert que os resultados devem passar o código de validação (por isso neste momento, você sabe que os dados não é nulo, não non-sensical e possivelmente útil).
  3. Se você sabe alguma coisa sobre a descrição do esquema de dados / dados, você poderia afirmar que os campos são sensíveis em relação ao outro. Por exemplo, se você conseguir um resultado com um helicóptero, ele não deve ser associado a uma altitude de 100 metros negativos ....
  4. Se você sabe alguma coisa sobre a distribuição probabilística dos dados, você deve ser capaz de recolher um conjunto de dados e afirmar que a sua distribuição resultante é dentro de um desvio padrão do que seria de esperar para ver.

Eu tenho certeza que com mais algumas informações, você vai ter um monte de sugestões úteis.

Parece que o seu teste em um nível muito elevado. Considere zombando da interface de serviço web e escrever outros testes de unidade na camada de dados que o acesso ao banco de dados. Alguns mais detalhes aqui pode fazer esta pergunta mais fácil de responder, por exemplo a situação que você está tentando teste.

Eu esperaria normalmente os resultados de um teste de unidade não mudar, ou pelo menos estar dentro de um intervalo que você está esperando

Um problema eu correr em é com complicada (que significa "porcaria") datamodels, onde você não pode nunca ser certo que os problemas são devido a erros de código ou erros de dados.

Um sintoma disso é quando o aplicativo funciona muito bem, passa todos os testes, etc, com dados ridicularizados ou um conjunto de dados fresca, mas quebra horrivelmente quando você executar o aplicativo em dados reais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top