2

我的基于 microsoft 的开发环境如下所示: - 巨大的原生 c++ 代码库,分为 10 个项目 - 每个项目都有一个依赖的测试项目(GoogleTest 单元测试),只是引用了要测试的源。

我使用 vsinstr 和 vsperfmon(用于检测/监视可执行文件和 dll 的 Visual Studio 工具)生成了覆盖率报告,但这并不像我预期的那样令人满意,因为报告只显示了单元测试行的覆盖率,而不是被测源(我检测了 testsuite-executable 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 似乎被完全删除,因为它没有被触及。据我不了解整个报道错误,这似乎不正确?

4

2 回答 2

2

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

于 2012-03-27T05:46:23.183 回答
0

您的构建设置中是否启用了任何优化?
也许这些链接会对您有所帮助: /GL(整个程序优化)/LTCG(链接时代码生成)

于 2009-09-18T14:59:33.427 回答