簡體   English   中英

庫單元測試的覆蓋率數據錯誤

[英]Wrong coverage data for unit tests of a library

我想借助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

這是發生了什么:

  1. cmake -DCMAKE_BUILD_TYPE=Coverage .. build_coverage目錄是使用target.dir目錄和* .gcno文件創建的
  2. cd tests && make Test可執行文件被創建並鏈接到build_coverage目錄中的共享庫( 也許這是我的錯誤
  3. make coverage范圍收集make coverage范圍數據並執行測試

編輯:

為了澄清我的問題,這里介紹了一些內容,但是只介紹了全局const或一個經常使用的輔助函數。 但不是我在測試中調用的函數/方法。

build_coverage/CMakeFiles/cxsc.dir/src/

  1. cmake -DC... :一些* .cmake和* .make文件
  2. build_coverage目錄中make之后:* .gcno文件
  3. lcov -c -i ... :仍* .gcno文件
  4. 運行測試后:* .gcda和* .gcno文件
  5. lcov -c ... :目錄中的移動很多,但文件名仍然相同

我在您的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")

看到這個帖子有類似的問題。

注意:“-coverage”可以替代“ -fprofile-arcs -ftest-coverage”和“ -lgcov”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM