Охват Rcov резко изменяется с помощью -xrefs
В моем текущем проекте Ruby on Rails выполняется тестирование через rcov (в частности, релевантность rcov, и у нас есть довольно высокий стандарт (мы терпим неудачу если у нас есть < 95% покрытия кода).
Мы используем следующую команду для проверки этого:
rcov_cmd = "rcov --rails --text-summary \
--include #{included_dirs} \
--exclude #{excluded_dirs} \
--aggregate #{coverage_dir}/coverage.data \
--output #{coverage_dir} \
Сегодня я нашел код, который регистрирует зеленый (с запуском) в отчетах rcov. Homever, я могу доказать, что этот код не запускается (я создаю исключение в начале функции, и мои модульные тесты проходят)
Я провел некоторое исследование и обнаружил флаг -xrefs для rcov, который, как я думал, добавит всех вызывающих абонентов для каждой строки в отчетах rcov.
Я изменил команду rcov на:
rcov_cmd = "rcov --rails --text-summary --xrefs \
--include #{included_dirs} \
--exclude #{excluded_dirs} \
--aggregate #{coverage_dir}/coverage.data \
--output #{coverage_dir} \
(обратите внимание на добавленный флаг --xrefs
).
Вместо дополнительной информации о вызывающем абоненте я вместо этого получаю покрытие от 96% до 48%.
Делает ли --xrefs изменение вида анализа, как делает rcov? (Я думал, что он просто соберет информацию о вызывающем абоненте). Как это отличается/лучше от первой команды?
(Я видел падение покрытия unit test, если имеется unit test, и я знаю, что процент покрытия может упасть, если есть ошибка в запуске, но он выглядит хорошо для меня)
Ответы
Ответ 1
Из руководство rcov:
--[no-]callsites
Show callsites in generated XHTML report. (somewhat slower; disabled by default)
--[no-]xrefs
Generate fully cross-referenced report. (includes --callsites)
Из Rcov CallSiteAnalyzer Class
A CallSiteAnalyzer can be used to obtain information about:
* where a method is defined ("defsite")
* where a method was called from ("callsite")
Имея этот анализ, rcov может предоставить более точную информацию о покрытии в стоимости более длительного исполнения.