Неправильные данные покрытия для модульных тестов библиотеки

Я хочу протестировать сложную разделяемую библиотеку (cxsc) с помощью cmake. После большого количества проб и ошибок мне удалось создать отчет о покрытии в формате html, но строки, которые я тестирую, с рамкой буст-тестирования, все еще остаются красными.

Это скрипт, который я использую для создания отчета о покрытии:

rm -fr build_coverage
mkdir build_coverage
cd build_coverage
cmake \
-DCMAKE_BUILD_TYPE=Coverage \
..
make
cd ../tests
make clean
make
cd ../build_coverage
make cxsc_coverage

Часть cmake, где создается отчет о покрытии:

# Cleanup lcov
COMMAND ${LCOV_PATH} --zerocounters --directory ${CMAKE_CURRENT_SOURCE_DIR}/build_coverage/CMakeFiles/cxsc.dir/src
COMMAND ${LCOV_PATH} --capture --initial --no-external --directory ${CMAKE_CURRENT_SOURCE_DIR}/build_coverage/CMakeFiles/cxsc.dir/src --output-file ${_outputname}.before

# Run tests
COMMAND LD_LIBRARY_PATH=${CMAKE_CURRENT_SOURCE_DIR}/build_coverage ${_testrunner} ${ARGV3}

# Capturing lcov counters and generating report
COMMAND ${LCOV_PATH} --capture --no-checksum --no-external --directory ${CMAKE_CURRENT_SOURCE_DIR}/build_coverage/CMakeFiles/cxsc.dir/src --output-file ${_outputname}.after
COMMAND ${LCOV_PATH} --add-tracefile ${_outputname}.before --add-tracefile ${_outputname}.after --output-file ${_outputname}.info

COMMAND ${GENHTML_PATH} -o ${_outputname} ${_outputname}.info

Makefile тестового бинарного файла (я думаю, что именно в этом и заключается ошибка):

g++ \
-o test_runner \
main.cpp \
test_interval.cpp \
-I./../src \
-I./../src/rts \
-I./../src/asm \
-I./../src/fi_lib \
-I./../build_coverage \
-L./../build_coverage \
-lcxsc \
-Wall -Winline \
-lboost_unit_test_framework

Вот что происходит:

  1. cmake -DCMAKE_BUILD_TYPE=Coverage .. каталог build_coverage создается с target.dir каталог и * .gcno файлы в нем
  2. cd tests && make Испытательный исполняемый файл создан и связан с общей библиотекой в build_coverage каталог (Может быть, здесь моя ошибка)
  3. make coverage Данные покрытия собраны и тесты выполнены

Редактировать:

Чтобы прояснить мою проблему, есть несколько покрытых строк, но только глобальные константы или одна вспомогательная функция, которая используется довольно часто. Но не те функции / методы, которые я вызываю в своих тестах.

Файлы в build_coverage/CMakeFiles/cxsc.dir/src/:

  1. После cmake -DC...: Несколько файлов * .cmake и * .make
  2. После make в build_coverage dir: * .gcno файлы
  3. После lcov -c -i ...: Все еще * .gcno файлы
  4. После запуска тестов: файлы * .gcda и * .gcno
  5. После lcov -c ...: Много движений в каталоге, но все те же имена файлов

1

Решение

Я не вижу флагов gcov в вашем make-файле. Попробуйте это для test_runner:

g++ \
-Wall -Winline -fprofile-arcs -ftest-coverage \
main.cpp \
test_interval.cpp \
-I./../src \
-I./../src/rts \
-I./../src/asm \
-I./../src/fi_lib \
-I./../build_coverage \
-L./../build_coverage \
-lcxsc \
-lboost_unit_test_framework \
-lgcov \
-o test_runner

Вашей общей библиотеке тоже нужны эти флаги:

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lgcov")

Видеть это сообщение с похожей проблемой.

NB: «—coverage» может заменить «-fprofile-arcs -ftest-покрытие» и «-lgcov»

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]