1
resposta

TDD em Servlet's

Fala galera, eu fiz os cursos de Servlet's aqui da Alura e vim realizar esse curso de Testes Automatizados. No curso é dito que a prática do TDD é muito importante para quem programa, porém me surgiu uma dúvida em relação a Testes Automatizados e Servlet's. É possível realizar o TDD na construção de aplicações que usam Sevlet's? Se for possível fazer isso, basta seguir a ideia de criar uma classe de Testes JUnit dentro de um método service ou doFilter de um Servlet e um Filter respectivamente e rodar a aplicação como JUnit Test ou eu teria que utilizar um outro tipo de teste sem ser esse do curso? Vou tentar deixar mais claro com um exemplo abaixo: *OBS: Apesar de que no meu Eclipse esse código deu erro de compilação. Se alguém puder ajudar, ficarei agradecido.

public class ControladorFilter implements Filter{

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {

        //Classe de Teste JUnit
        @Test
        public void teste() {

            System.out.println("CONTROLADOR FILTER");
            HttpServletRequest httpRequest = (HttpServletRequest) request;
            HttpServletResponse httpResponse = (HttpServletResponse) response;

            String paramAcao = httpRequest.getParameter("acao");

            String nomeDaClasse = "br.com.projeto.sistema.acao.".concat(paramAcao);
            String nome = null;

            try {
                @SuppressWarnings("deprecation")
                Acao acao = (Acao) Class.forName(nomeDaClasse).newInstance();
                nome = acao.executa(httpRequest, httpResponse);
            } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
                System.out.println("Mensagem de erro: ".concat(e.getMessage()));
                e.printStackTrace();
                throw new ServletException();
            }

            String[] tipoEndereco = nome.split(":");

            if(tipoEndereco[0].equals("forward")) {
                request.getRequestDispatcher("WEB-INF/view/".concat(tipoEndereco[1]))
                    .forward(request, response);
            } else {
                httpResponse.sendRedirect("/sistema/entrada?acao=".concat(tipoEndereco[1]));
            }
        }
    }
}
1 resposta

Oi, Lucas! Tudo certo?

Sinto muito pela demora.

Você pode usar a metodologia TDD para construir aplicações que usam Servlet, sim! :D

Uma abordagem interessante pra isso é criar classes separadas para testes JUnit e testando individualmente pelo Servlet e por Filters.

O seu código apresenta dois erros de sintaxe. O primeiro é o fato de que a anotação @Test está sendo usada dentro do método doFilter. As anotações @Test são normalmente usadas para marcar métodos de teste JUnit em classes de teste dedicadas, e não dentro de um método doFilter.

O método doFilter é chamado pelo contêiner do Servlet durante o processamento das requisições. Ele é projetado para executar lógica de filtragem, como autenticação, manipulação de requisições ou respostas etc.

No código há uma mistura entre o método de filtragem e um possível método de teste - que, como dito anteriormente, não é o ideal.

Ou seja, basta você utilizar os testes individualmente que funcionará do modo correto.

Se outra dúvida surgir, estou disponível.

Abraços e bons estudos!