[symfony] Testes automatizados no Symfony

Pessoas que não utilizam testes em seus projetos não conseguem ter a certeza de que todo o projeto continua funcionando desde a última alteração no código fonte. Eu não estou falando daquele teste tosco que fazemos manualmente no momento do desenvolvimento, eu estou falando de teste automatizados.

Automação de teste é utilizado para garantir que não surgiram novos defeitos em componentes já testados, essa técnica de teste é conhecida como Teste de regressão e deve ser executado antes e depois de cada alteração no sistema para checar se houve algum efeito colateral no sistema.

O Symfony por ser um framework de desenvolvimento ágil prove ferramentas boas para automação dos testes, e o melhor, essas ferramentas são bem integradas com o restante do framework.

O symfony divide os testes em duas partes, testes unitários e testes funcionais, vou mostrar rapidamente a diferença entre elas.

Testes Unitarios

O symfony possui uma "biblioteca" própria para fazermos testes unitários, é uma classe única chama lime e foi baseada na biblioteca do Perl chamadas Test::More.

Eles servem para garantir que determinada função ou método vai retornar o valor esperado para determinadas entradas, ele é feito através de uma comparação do resultado obtido com o resultado esperado, ex:

Exemplo de um teste unitário para testar o método sfToolkit::isPathAbsolute

Unit Test on symfony

Testes Funcionais

Os testes funcionais validam uma funcionalidade completa e não somente uma simples checagem de Entrada e Saída. Eles são normalmente utilizados para testar os principais componentes do symfony, como o sistema de rota, cache, formulários, filtros, etc.

Um exemplo de um teste funcional realizado em cima da url sobre-o-autor.
-> Verificar se o sistema de rotas identificou a url e redirecionou para o módulo responsável.
-> Verifica se a requisição possui o código 200 OK.
-> Verifica se no conteúdo da página existe a palavra Sobre o Autor
Para escrever um teste como este precisamos programar não mais que 6 linhas de código php.

exemplo de um teste funcional no symfony

Outros testes...

Existem alguns tipos de testes no symfony que não são possíveis serem automatizados sem ferramentas externas, são elas funcionalidades em ajax e efeitos de tela.

Lembre-se:

  • Você deve escrever testes funcionais para todas suas actions.
  • Mantenha seus testes simples e legíveis
  • O software regride a cada erro encontrado em código existente e testado quando este foi afetado por novas alterações.
  • Testes unitários e funcionais são ferramentas de desenvolvimento e como tal devem ser executadas somente em ambiente de desenvolvimento.
  • O próprio Symfony utiliza sua biblioteca lime para testes de regressão, entaõ você poderá encontrar muitos exemplos no próprio código fonte do symfony.

Acesse http://www.symfony-project.org/book/1_0/15-Unit-and-Functional-Testing para mais informações.