Boa tarde pessoa.
Me deparei agora com uma dificuldade em realizar testes unitártios em servlets. Qual seria a melhor estratégia para se testar servlets?
Bom, gostaria de testar os servlets passando mocks para satisfazer as dependências do servlet. Consigo passar os mocks e depois chamar o método doPost (ou doGet). Funciona corretamente, mas não consigo saber o resultado da execução do método.
Verifiquei as ferramentas ServletTester http://docs.codehaus.org/display/JETTY/ServletTester e ServletUnit http://httpunit.sourceforge.net/doc/servletunit-intro.html porém, pelo que entendi, essas ferramentas apenas fazem a chamada ao servlet como se estivesse realizando uma chamada a partir de um jsp, mas não consegui descobir como se poderia passar os mocks para o servlet em questão. Isso é possível?
Outra abordagem que já estudei é a de colocar a lógica em um método separado e testar esse metódo e seu retorno. Essa seria uma boa estratégia, ou estaria mais para POG?
Cara, existem ferramentas/estrategias de testes para as mais variadas camadas de uma aplicacao: entendo que o Servlet represente a camada de controle da sua aplicacao, isto eh, ele recebe a requisicao do cliente e passa as informacoes para uma camada de servico (veja que esta eh a modelagem que voce citou como uma ultima opcao). Bem, eu costumo utilizar essa estrategia, pois desse modo eu terei um componente especilizado nas regras de negocio da aplicacao e poderei reaproveitar as mesmas regras em outros pontos do sistema. Com isso, eu realizo meus testes unitarios em cima dos componentes que implementam tais regras de negocio e não no Servlet em si, pois assim o Servlet se responsabiliza apenas pelo controle de navegacao entre as paginas. No caso em que as regras de negocio sofram mudancas ou passem por uma refatoracao, basta voce executar os testes unitarios focados na camada de servicos para garantir que os mesmos nao quebraram depois das alteracoes, pois as regras mudaram, mas a nevegacao permanesse a mesma.
abrs
Opa Vini, valeu pela resposta.
Realmente o melhor cenário é como você citou. Os servlets (e assim o controle de navegação) seriam testados de forma separada, certo?
Estou trabalhando em um sistema legado, sem nenhum teste de unidade escrito, e estou adaptando as áreas em que estou trabalhando e criando os testes. Porém, apesar de haver separação de parte da lógica de negócio, uma parte ainda está nos servlets. Nesses casos, para não haver muitas modificações (não há testes para garantir a integridade do sistema), estou apenas separando a lógica em um novo método.
Espero ter suporte de testes mais para frente para poder fazer mudanças mais profundas.
Valeu.