Когда я запускаю gcovr после запуска моего модульного теста, я получаю неправильный номер для покрытия заголовочных файлов, где размещены некоторые определения встроенных функций-членов.Например:
----------------------------------------------------------------------------
File Lines Exec Cover Missing
------------------------------------------------------------------------------
include/analysis/dataobjects/DetailedHit.h 6 2 33% 41-43,45
include/analysis/dataobjects/Hit.h 19 0 0% 31-33,35-36,42-43,50-51,58-59,74-75,82-83,90-91,98-99
Для Hit.h
зарегистрированное покрытие составляет 0%, но я уверен, что по крайней мере некоторый код из этого заголовка будет выполнен во время выполнения модульного теста, так как, если я помещу cout втогда я вижу это в консоли.В Интернете часто говорят, что это проблема, связанная с тем фактом, что компилятор включает код функции-члена, так что вызов функции не генерируется, и, следовательно, инструменты покрытия не отслеживают выполнение.Поэтому я добавил флаги:
-fno-inline -fno-inline-small-functions -fno-default-inline
к вызову компилятора (gcc 8.2.1), но я получаю тот же отчет о покрытии.Так что я не понимаю, что происходит.
Меня больше всего удивляет то, что gcovr сообщает о 2 закрытых строках в DetailedHit.h
.Этот заголовок очень похож на Hit.h
, поэтому я ожидал бы того же поведения с 0% заявленным покрытием, но эта функция-член:
const std::vector<Herd::ParticleHit> ParticleHits() const {
return _particleHits;
}
результаты будут выполнены 10 раз.Это простая функция, поэтому она должна быть вставлена как те, что указаны в Hit.h
, но все же она должна быть покрыта.В случае, если это имеет значение, Hit является конкретным базовым классом для DetailHit, и у обоих нет виртуальных методов.
Я думаю, что мне не хватает некоторых важных знаний о том, как работают gcov и gcovr, но я не смогя не могу найти подходящую подсказку в Интернете, поэтому я буду признателен за любую помощь в этом.Благодаря.