0

我使用 运行以下代码gcovr,并获得 100% 的线路覆盖率,尽管bar没有被调用。我究竟做错了什么?

#include <iostream>

struct A{
    static void foo(){
        std::cout << "foo" << std::endl;
    }

    static void bar(){
        std::cout << "bar" << std::endl;
    }
};

int main() {
    A::foo();
    // A::bar();
}

HTML 报告如下所示: 在此处输入图像描述

我使用以下 CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)

set(PROJECT_NAME test_gcovr)
project(${PROJECT_NAME})

if(NOT CMAKE_COMPILER_IS_GNUCXX)
    message("must use gnu compiler")
    EXIT()
endif()

set(CMAKE_CXX_FLAGS "-g -Wall -O0")

add_executable(run_tests ${PROJECT_SOURCE_DIR}/test.cpp)

set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules)
include(CodeCoverage)
append_coverage_compiler_flags()

setup_target_for_coverage_gcovr_html(NAME run_tests_coverage
                                    EXECUTABLE run_tests
                                    DEPENDENCIES run_tests)

有了这个CodeCoverage.cmake

我通过调用 编译和运行cmake,然后调用make run_tests_coverage.


编辑:在上面的示例中,它似乎bar不是可执行文件的一部分,尽管-O0......我修复了这个:

...
bool x = false;
if (x){
    A::bar();
};
...

现在我得到了一份正确的覆盖率报告。

现在问题仍然存在 - 如何检查仅标头库的测试覆盖率(无需详细查看报告)?


编辑#2:

看到这个 Getting useful GCov results for header-only libraries

4

0 回答 0