Покрытие 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? (Я думал, что он просто соберет информацию о месте вызова). Чем это отличается/лучше от первой команды? (Я видел падение покрытия юнит-тестами, если есть сбой юнит-теста, и я знаю, что процент покрытия может упасть, если в прогоне есть ошибка, но мне это кажется хорошим)


person RyanWilcox    schedule 10.08.2010    source источник
comment
Пробовали ли вы с помощью только --callsites и без --xrefs определить, действительно ли это включенная информация о звонках вызывает разницу? Можно немного сузить проблему.   -  person Shadwell    schedule 18.08.2010
comment
Я заменил --xrefs и --callsites и увидел такое же падение тестового покрытия.   -  person RyanWilcox    schedule 18.08.2010


Ответы (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

A CallSiteAnalyzer can be used to obtain information about:

    * where a method is defined ("defsite")
    * where a method was called from ("callsite")

Наличие этого анализа rcov может предоставить более точную информацию о покрытии за счет более длительного выполнения.

person mpapis    schedule 16.11.2010