GoogleTest Move 构造函数覆盖率

googletest move constructor coverage

本文关键字:覆盖率 构造函数 Move GoogleTest      更新时间:2023-10-16

我正在将googletestgcovr结合使用,这会产生一些奇怪的行为。我有一个头文件foo.h gcovr声明有一些未包含在测试中的行。这些行是类定义和移动构造函数:

File  Lines Exec Cover Missing
foo.h 42    40   95%   39,47

其中第 39 行是:

class foo

第 47 行是:

foo(foo&&) = default;

我尝试在带有 std::move() 的测试体中显式调用此函数,但无济于事。是否有解决此问题的方法,或者我是否坚持使用99%的覆盖率报告?

我应该注意,除了类定义和复制/移动语义(它们都定义为default(之外,这个标头中没有实现;所有函数体都在foo.cpp

似乎将这些

行从覆盖率报告中删除为"未覆盖"的唯一方法是将它们从标题中删除。这并没有真正影响任何事情,因为他们只是将复制/移动/dtor设置为default。实际实施或删除这些内容的其他任何地方都不会显示在覆盖范围报告中。

您可以使用特殊注释从覆盖范围计算中排除某些行。此行为未记录,但稳定。您可以:

  • 排除包含GCOVR_EXCL_LINE的行
  • 排除 GCOVR_EXCL_STARTGCOVR_EXCL_STOP 之间的线区域。

标记可以从GCOVRLCOV开头,以防您也使用该工具。当前不支持 lcov 的分支排除标记。