【问题标题】:googletest move constructor coveragegoogletest移动构造函数覆盖率
【发布时间】:2017-03-17 15:58:15
【问题描述】:

我将googletestgcovr 结合使用,这会产生一些奇怪的行为。我有一个头文件foo.hgcovr 声称有一些行没有被测试覆盖。这些行是类定义和移动构造函数:

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

【问题讨论】:

  • 你有没有试过这样的测试代码:Foo foo1; Foo foo2(std::move(foo1));
  • @PiotrNycz 是的,我已经尝试在测试用例中明确调用它

标签: c++ googletest gcovr


【解决方案1】:

看来,将这些行从覆盖率报告中删除为“未覆盖”的唯一方法是将它们从标题中删除。这不会真正影响任何事情,因为他们只是将 copy/move/dtor 设置为default。实际实施或删除这些内容的其他任何地方都不会显示在覆盖率报告中。

【讨论】:

    【解决方案2】:

    您可以使用特殊的 cmets 从覆盖率计算中排除一些行。此行为未记录在案,但稳定。你可以:

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

    如果您也使用该工具,标记可以以GCOVRLCOV 开头。目前不支持 Lcov 的分支排除标记。

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 2014-04-11
      • 1970-01-01
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 2018-03-15
      相关资源
      最近更新 更多