O Spring tem uma framework que simula um web container, ou seja, ele fornece mockups para a API de Servlets que lhe permite chamar suas actions sem ter que instanciar obrigatoriamente um web container. Dessa maneira fica simples usar o JUnit para testar de forma automatizada algumas partes da sua aplicação web.
Minha dúvida:
Até onde esse approach é bom o suficiente para testar sua aplicação web?
Como fazer isso se vc não está usando o Spring. Qual a solução / framework padrão para isso?
Não seria melhor usar o jetty com selenium ou isso se torna um teste muito pesado para ser executado de forma automatizada e remota?
Estou usando o maven e quero que esses testes sejam executados num ambiente remoto de continuous integration (Hudson).
Cara, eu já ouvi falar do Mockito e o Easy mock que vc pode tentar por fora do Spring.
Bem, sei que essas frameworks facilitam sua vida, mas ainda estou pensando sobre isso.
Até onde eu sei, vc pode usar 3 estratégias durante os testes:
[quote]*Busca de dados no DB.
*Mock de objetos.
*Criar um objeto na unha para simular o teste.[/quote]
Realmente não vi muita diferença entre você buscar algo do banco para utilizar no teste e utilizar dados criados na unha (Já trabalhei com os 2). Tenho minhas dúvidas sobre a vantagem desse método.
Imagine só, vc vai testar se o usuário está com seu atributo bloqueado = true. Vc busca no caso 2 usuários, um user bloqueado e outro não.
Qual seria a diferença de buscar 2 caras no banco com esse valor ou fazer o código abaixo?
[code]Usuario usuBloqueado = new Usuario();
usuBloqueado.bloquear();
Usuario usuDesbloqueado = new Usuario();
usuDesbloqueado.desbloquear();[/code]
Ambos trariam esse valor e vc passaria o equals tranquilo.
Para integração continua onde vc precisa fazer seus testes não podem demorar eu pensaria em, talvez, alguns poucos testes ou usar algo como um selenium grid. Pode ser util se vc tem que funcionar da mesma forma em diversos browsers.
Mas eu teria testes completos mesmo que fossem pesados para
Testes funcionais completos (assim uma nova feature não quebra as funcionalidades antigas)
Testes de stress (executa-los varias vezes durante a noite medindo o que for possivel e identificar possiveis problemas de performance, memory leak, etc).