Я пытаюсь собрать результаты покрытия в файле библиотеки foobar.cpp, создав модульные тесты googletest для файла souce, а затем используя gcov для результатов покрытия, наконец, используя lcov для создания HTML-документа.
Я получил модульное тестирование и результаты gcov для работы хорошо, НО lcov никогда не отображает правильные результаты покрытия, полностью пропуская мои результаты foobar.cpp .gcov?
У меня есть платформа для юнит-тестирования, настроенная по сути так:
~/svn/googletest-read-only/
/src
gtest_main.cc
gtest-all.cc
/include
~/code/proj/
foobar.cpp
foobar.hpp
~/code/proj/unittest/
foobar_test.cpp
Makefile
Все бегут от модульный тест/, я делаю unittest/ $ make
, выполняя исполняемый файл foobar_test в этой папке. главный() в googletest / SRC / gtest_main.cc файл. Мой Makefile основан на googletest и имеет следующие важные настройки:
CXXFLAGS += -g -O0 --coverage -fprofile-arcs -ftest-coverage -Wall -Wextra -pthread
LDFLAGS = -lpthread -lgcov
foobar_test : foobar.o foobar_test.o gtest_main.a
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) $^ -o $@
Я запускаю исполняемый файл один раз $ ./foobar_test
, Это создает .gcda для соответствия .gcno каждого источника (всего 4x: foobar, foobar_test, gtest_main и gtest-all).
Тогда беги $ gcov foobar.cpp
только на foobar.cpp (я пробовал альтернативы, такие как $ gcov *.cpp
а также … использование только foobar_test.cpp не работает). Это создает стандартный вывод, который включает в себя кучу дерьма / usr / lib, но также и МОЙ результат: Файл ‘../foobar.cpp’; Выполненные линии: 61,25% из 80; ..` и создает мои файлы .gcov.
Изучая мой файл .cpp.gcov, он показывает хорошие результаты, как описано выше для 61,25% строк. На данный момент у меня есть 4x .gcda, 4x, gcno и около 20x других файлов .gcov.
Теперь, когда я пытаюсь использовать lcov здесь lcov --directory . -c -o result.info
это идет не так.
Capturing coverage data from .
Found gcov version: 4.4.7
Scanning . for .gcda files ...
Found 4 data files in .
Processing ./gtest_main.gcda
geninfo: WARNING: cannot find an entry for foobar.cpp.gcov in .gcno file, skipping file!
geninfo: WARNING: cannot find an entry for *more c++ files*.gcov in .gcno file, skipping file!
Processing ./foobar.gcda
geninfo: WARNING: no data found for /home/asdf/code/proj/foobar.cpp
Processing ./foobar_test.gcda
geninfo: WARNING: no data found for /home/asdf/code/proj/unittest/foobar_test.cpp
Processing ./gtest-all.gcda
Finished .info-file creation```
Просмотр вывода lcov после $ genhtml report.info --output-directory report && firefox report/index.html
показывает только около 5 каталогов, которые не содержат никаких файлов foobar *?
Я пробовал несколько комбинаций $ gcov []cpp
так же как $ lcov --base-directory [] --directory [] -c -o
но безрезультатно. Также пробовал мягкое связывание некоторых исходных файлов, без помощи.
Что нужно изменить в моей настройке или командах? Комментаторы могут предложить лучшее решение в целом.
Задача ещё не решена.