我想在 cmake 的帮助下测试一个复杂的共享库(cxsc)。经过大量的试验和错误后,我设法创建了一个 html 覆盖率报告,但是我使用 boost 测试框架测试的行仍然是红色的。
这是我用来创建覆盖率报告的脚本:
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
收集覆盖数据并执行测试
编辑:
为了澄清我的问题,这里涵盖了一些行,但只有全局常量或一个经常使用的辅助函数。但不是我在测试中调用的函数/方法。
中的文件build_coverage/CMakeFiles/cxsc.dir/src/
:
- 之后
cmake -DC...
:一些 *.cmake 和 *.make 文件 - 在dir: *.gcno 文件
make
之后build_coverage
- 之后
lcov -c -i ...
:仍然是 *.gcno 文件 - 运行测试后:*.gcda 和 *.gcno 文件
- 之后
lcov -c ...
:目录中有很多移动,但文件名仍然相同