mergulhao.info
Por Sylvestre Mergulhão
Sylvestre Mergulhão é programador web e fundador da HE:labs.
Veja também minhas palestras no Speaker Deck e me acompanhe no twitter @smergulhao.
Analizando cobertura dos testes com Rcov
Postado em 01/08/2007
Até o momento considero um sucesso a minha adesão ao TDD no desenvolvimento com Rails. Em apenas dois dias os testes automatizados encontraram bugs que possivelmente passariam desapercebidos e já escrevi novos testes para cobrir situações inicialmente não previstas, mas que mostraram sua cara nos testes que já estavam escritos.
Após algumas horas de testes e programação finalizei a primeira etapa de codificação do que será o novo sistema de inscrições do Fórum de Software Livre do Rio de Janeiro desse ano, que ocorrerá em outubro. Foi todo um período de codificação em que não encostei em html/css, mas apenas na codificação dos testes e na lógica dos controladores e modelos.
Para validar todo o trabalho é necessário verificar a cobertura dos testes. Assim podemos descobrir se alguma linha de código passou sem ser testada. Pegando emprestada a idéia do pessoal da ImproveIt, instalei o rcov no Ubuntu:
sudo apt-get install rcov
Foi acrescentado um rake task para automatizar o processo de geração do relatório. Gerado o arquivo /lib/tasks/rcov.rake com o conteúdo(levemente modificado do original da ImproveIt):
require 'rake/clean'
RCOV_OUT = "doc/coverage"
EXCLUDE = "-x /site_ruby/"
CLOBBER.include(RCOV_OUT)
RCOV = "rcov --no-color"
task :coverage_units do
sh "find test/unit -name '*.rb' | xargs #{RCOV} #{EXCLUDE} --rails --output #{RCOV_OUT}/units"
end
task :coverage_functional do
sh "find test/functional -name '*.rb' | xargs #{RCOV} #{EXCLUDE} --rails --output #{RCOV_OUT}/functionals"
end
task :coverage_all do
sh "find test/* -name '*.rb' | xargs #{RCOV} #{EXCLUDE} --rails --output #{RCOV_OUT}"
end
task :rcov => [:coverage_all]
Agora basta entrar no diretório do seu projeto em Rails e digitar:
rake rcov
Será gerado dentro do diretório /doc/coverage o relatório de cobertura dos testes. E não é eu fui bem pra minha surpresa? Resultado: 100% testado! Que venham os próximos testes!