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

2023-12-25

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

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


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 vsinstr/vsperfmon 获得真实的代码覆盖率 的相关文章

随机推荐