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!

Resultado cobertura rcov

comments powered by Disqus