我的基于微软的开发环境如下所示: - 庞大的本机c ++代码库,分为10个项目 - 每个项目都有一个依赖测试项目(GoogleTest单元测试),简单地引用要测试的源。
我使用vsinstr和vsperfmon(用于检测/监视可执行文件和dll的可视工作室工具)生成了覆盖率报告,但这并不像我预期的那样令人满意,因为报告只显示了单元测试行的覆盖范围,而不是测试中的来源(我检测了testsuite可执行的Sample_Project_Test.exe)。
例如,如果我有这样的方法:
(Sample_Project/add_ints.cpp)
int add(int a, int b){
return a+b;
}
int add2(int a, int b){
if (a == b)
return a * 2;
else
return a+b;
}
单元测试是这样的:
(Sample_Project_Test/int_adds_tests.cpp)
TEST(AddTest, ReturnsCorrectSum)
{
EXPECT_EQ(4, add(2,2));
}
我的线覆盖率为100%,因为只测量add_ints.cpp中的add-part,add2似乎被完全删除,因为它没有被触及。至于我不明白整个报道错误,这似乎不正确?
答案 0 :(得分:2)
您需要使用链接器选项/ OPT:NOREF构建测试,以便它链接所有代码,而不仅仅是使用的代码。
答案 1 :(得分:0)
您的构建设置中是否启用了任何优化?
也许这些链接会对你有所帮助:
/GL (Whole Program Optimization)和/LTCG (Link-time Code Generation)