我使用gcovr
运行以下代码,尽管未调用bar
,但行覆盖率达到100%。
我在做什么错了?
#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();
}
我使用以下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: