Предисловие
Я только начал изучать Ruby и стараюсь изучать не только язык, но и некоторые стратегии развития.Будучи новичком, я концентрируюсь на тестировании и разработке, ориентированной на поведение.(да, я делаю оба в целях сравнения)
С моим небольшим программным проектом я использую
- UnitTest (TDD)
- Огурец (BDD)
- Rspec (TDD и BDD)
В разных местах я встречал RCov как инструмент, позволяющий сказать мне, сколько из моего реального кода я действительно тестирую.
Я настроил следующую RakeTask в своем Rakefile
для анализа ковариации UnitTests:
desc "Run RCov to get coverage of UnitTests"
Rcov::RcovTask.new(:rcov_units) do |t|
t.pattern = 'tests/**/tc_*.rb'
t.verbose = true
t.rcov_opts << "--html"
t.rcov_opts << "--text-summary"
t.output_dir = "coverage/tests"
end
Это работает отлично, и я получаю красивый цветной отчет HTML в coverage/tests
.
Введение проблемы
Аналогично я написал следующие RakeTasks для RCov, которые будут использоваться для анализа покрытия моих спецификаций:
desc "Run RCov to get coverage of Specs"
Rcov::RcovTask.new(:rcov_spec) do |t|
t.pattern = 'spec/**/*_spec.rb'
t.verbose = true
t.rcov_opts << "--html"
t.rcov_opts << "--text-summary"
t.output_dir = "coverage/spec"
end
Определение проблемы
Однако сгенерированный отчет HTML в coverage/spec
выглядит как-то неполным и почти неудачным.
Ни один из тестируемых тел метода не помечен как покрытый и, следовательно, красный.Тем не менее, я на 100% уверен, что они выполняются в рамках спецификации.Только строки def method_name(args)
и class ClassName
помечены как «зеленые».(а также строки с attr_reader :instance_variable
)
Я что-то упустил?
$: ruby --version
ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux]
$: rspec --version
2.8.0
$: rcov --version
rcov 0.9.11 2010-02-28
$: rake --version
rake, version 0.9.2