Teste de unidade de servlet
-
24-09-2019 - |
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?
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.