我想在cmake的帮助下测试一个复杂的共享库(cxsc)。经过大量的试验和错误,我设法创建了一个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
这就是:
cmake -DCMAKE_BUILD_TYPE=Coverage ..
build_coverage目录创建时带有target.dir
目录和* .gcno文件cd tests && make
测试可执行文件已创建并链接到build_coverage
目录中的共享库(可能这是我的错误)make coverage
收集覆盖率数据并执行测试修改
为了澄清我的问题,有一些线被覆盖但只有全局的consts或一个帮助函数经常使用。但不是我在测试中调用的函数/方法。
build_coverage/CMakeFiles/cxsc.dir/src/
中的文件:
cmake -DC...
之后:一些* .cmake和* .make文件make
dir中的build_coverage
后:* .gcno文件lcov -c -i ...
之后:仍然是* .gcno文件lcov -c ...
之后:目录中的大量移动但仍然是相同的文件名答案 0 :(得分:0)
我的makefile中没有看到任何gcov标志。试试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")
请参阅此post并遇到类似问题。
注意:“--coverage”可以替代“-fprofile-arcs -ftest-coverage”和“-lgcov”