对于我的仅标题C++库(许多模板等),我使用GCov来检查测试覆盖率.但是,它会报告所有标头的100%覆盖率,因为编译器首先不会生成未使用的函数.手动发现未覆盖的功能很容易,但却无法实现持续集成的目的......
如何自动解决这个问题?我应该使用"line hit/LOC"作为我的覆盖率指标,而且再也不会达到100%吗?
Mar*_*tts 15
除了GCC控制内联的通常标志;
--coverage -fno-inline -fno-inline-small-functions -fno-default-inline
Run Code Online (Sandbox Code Playgroud)
您可以在单元测试文件的顶部实例化模板类;
template class std::map<std::string, std::string>;
Run Code Online (Sandbox Code Playgroud)
这将为该模板类中的每个方法生成代码,使覆盖工具完美地工作.
另外,请确保初始化*.gcno文件(因此对于lcov)
lcov -c -i -b ${ROOT} -d . -o Coverage.baseline
<run your tests here>
lcov -c -d . -b ${ROOT} -o Coverage.out
lcov -a Coverage.baseline -a Coverage.out -o Coverage.combined
genhtml Coverage.combined -o HTML
Run Code Online (Sandbox Code Playgroud)