如何使用vsinstr / vsperfmon获得真正的代码覆盖率

时间:2009-09-18 08:34:25

标签: c++ unit-testing visual-studio-2008 native googletest

我的基于微软的开发环境如下所示: - 庞大的本机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似乎被完全删除,因为它没有被触及。至于我不明白整个报道错误,这似乎不正确?

2 个答案:

答案 0 :(得分:2)

您需要使用链接器选项/ OPT:NOREF构建测试,以便它链接所有代码,而不仅仅是使用的代码。

答案 1 :(得分:0)

您的构建设置中是否启用了任何优化?
也许这些链接会对你有所帮助: /GL (Whole Program Optimization)/LTCG (Link-time Code Generation)