Pergunta

Eu tenho vários servlets em execução no contêiner de servlet do Tomcat.Gostaria de separar o código de teste do código de produção, então considerei usar uma estrutura de teste.O JUnit está bem integrado ao Eclipse, mas não consegui fazê-lo executar servlets usando um servidor Tomcat em execução.Você poderia recomendar uma estrutura de teste de unidade que suporte o teste de servlets do Tomcat?A integração do Eclipse é boa, mas não necessária.

Foi útil?

Solução

Confira Unidade de Servlet, que faz parte do HttpUnit.Resumindo, ServletUnit fornece uma biblioteca de simulações e utilitários que você pode usar em testes JUnit comuns para simular um contêiner de servlet e outros objetos relacionados a servlets, como objetos de solicitação e resposta.O link acima contém exemplos.

Outras dicas

O Spring Framework possui ótimos objetos simulados prontos para várias classes da API do Servlet:

http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/mock/web/package-summary.html

OK.Ignorando o bit 'tomcat' e codificando para o servlet, sua melhor aposta é criar simulações para os objetos de resposta e solicitação e, em seguida, dizer o que você espera dele.

Portanto, para um doPost vazio padrão e usando EasyMock, você terá

public void testPost() {
   mockRequest = createMock(HttpServletRequest.class);
   mockResponse = createMock(HttpServletResponse.class);
   replay(mockRequest, mockResponse);
   myServlet.doPost(mockRequest, mockResponse);
   verify(mockRequest, mockResponse);
}

Em seguida, comece a adicionar código ao doPost.As simulações irão falhar porque não têm expectativas, e então você pode definir as expectativas a partir daí.

Observe que se quiser usar EasyMock com classes, você terá que usar a biblioteca de extensão de classes EasyMock.Mas funcionará da mesma maneira a partir de então.

Separe as partes desse código que lidam com solicitações e respostas HTTP das partes que fazem lógica de negócios ou manipulação de banco de dados.Na maioria dos casos, isso produzirá uma arquitetura de três camadas, com uma camada de dados (para o banco de dados/persistência), uma camada de serviço (para a lógica de negócios) e uma camada de apresentação (para solicitações e respostas HTTP).

  1. Você pode testar a unidade das duas primeiras camadas sem nenhum material de servlet;será mais fácil testar dessa forma.
  2. Você pode testar a camada de apresentação, como outros sugerem, usando objetos de solicitação e resposta HTTP simulados.
  3. Por fim, se achar realmente necessário, você pode fazer testes de integração usando um também como Unidade HTML ou JWebUnit .

Para testes "no contêiner", dê uma olhada em Cacto

Se você quiser testar sem um contêiner em execução, você pode simular seus componentes com seus próprios mockobjects (por exemplo,com EasyMock) ou você pode tentar MockRunner que possui Stubs "pré-definidos" para testar servlets, conexões jdbc etc.

Atualizado em fevereiro de 2018: OpenBrace Limited fechou, e seu produto ObMimic não é mais compatível.

Se você quiser uma alternativa mais recente ao ServletUnit para testes JUnit de Servlets, você pode encontrar o da minha empresa ObMimic biblioteca útil.Está disponível gratuitamente no site Transferências página.

Assim como o ServletUnit, ele fornece uma biblioteca de classes que você pode usar em testes JUnit ou TestNG normais fora de qualquer contêiner de servlet para simular a API do Servlet.

Seus objetos da API do Servlet não têm construtores de argumentos, são totalmente configuráveis ​​e inspecionáveis ​​para todos os dados e configurações relevantes da API do Servlet e fornecem uma simulação completa de todo o comportamento especificado pelo javadoc da API do Servlet.Para ajudar nos testes, há suporte para gravação seletiva de chamadas de API de Servlet, controle sobre qualquer comportamento dependente de contêiner, verificações de chamadas ambíguas (ou seja,onde o comportamento da API do Servlet não está totalmente definido) e uma simulação JNDI na memória para qualquer código de servlet que dependa de pesquisas JNDI.

Para obter detalhes completos, código de exemplo, guias de "como fazer", Javadoc etc., consulte o site.

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