Pergunta

Atualmente, estou usando a estrutura do TestNG para testar a lógica de negócios de aplicativos, adicionei algumas classes de servlet recentemente.

Como faço para testar essas classes de servlet na estrutura de teste?

Foi útil?

Solução

Siga o conselho de Skaffman, se possível. Caso contrário, ou se você quiser testar o comportamento dos servlets como controladores de front-end, em vez da lógica de negócios dentro deles, você pode usar:

Outras dicas

Uma das maneiras mais fáceis é ServletTester de cais. Tudo é feito no jetty incorporado automaticamente, para que não haja porta aberta durante os testes! Se você usa o MAVEN, o seguinte artefato é necessário para ativar este método:

<dependency>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>jetty-servlet-tester</artifactId>
  <version>6.1.16</version>
  <scope>test</scope>
</dependency>

Exemplo:

Prepare o ServletTester

ServletTester tester=new ServletTester(); 
tester.addServlet(HelloServlet.class, "/hello"); 
tester.start();

Crie solicitação HTTP

HttpTester request = new HttpTester(); 
request.setMethod("GET");
request.setHeader("Host","tester"); 
request.setURI("/hello");
request.setVersion("HTTP/1.0");

Ligue para o servlet e recupere a resposta:

HttpTester response = new HttpTester();
response.parse(tester.getResponses(request.generate()));

Afirme o que você deseja verificar na resposta e seu conteúdo:

assertEquals(200,response.getStatus()); 
assertEquals("Hello Servlet",response.getContent());

Eu sugiro que você mova toda a lógica de negócios Fora das classes do servlet, em suas próprias classes que você pode testar. Isso deixa os servlets assim como cola entre sua lógica de negócios e o contêiner, com nada neles que vale a pena testar.

As classes da API, como HttpServletRequest, ServletConfig, etc, são alvos principais para o uso de uma estrutura de zombaria de sua escolha (JMOCK, Mockito etc.), pois são todas interfaces.

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