C++ googletest移动构造函数覆盖率
我将C++ googletest移动构造函数覆盖率,c++,googletest,gcovr,C++,Googletest,Gcovr,我将googletest与gcovr结合使用,这会产生一些奇怪的行为。我有一个头文件foo.h,gcovr声明中有一些行未在测试中涵盖。这些行是类定义和移动构造函数: 文件行Exec Cover丢失 食物卫生署42 40 95%39,47 其中第39行是: class-foo 第47行是: foo(foo&&)=默认值; 我尝试在测试体中使用std::move()显式调用此函数,但没有成功。这个问题有解决办法吗?还是我只能写一份99%的覆盖率报告 我应该注意,除了类定义和复制/移动语义(它
googletest
与gcovr
结合使用,这会产生一些奇怪的行为。我有一个头文件foo.h
,gcovr
声明中有一些行未在测试中涵盖。这些行是类定义和移动构造函数:
文件行Exec Cover丢失
食物卫生署42 40 95%39,47
其中第39行是:
class-foo
第47行是:
foo(foo&&)=默认值;
我尝试在测试体中使用std::move()
显式调用此函数,但没有成功。这个问题有解决办法吗?还是我只能写一份99%的覆盖率报告
我应该注意,除了类定义和复制/移动语义(它们都被定义为
default
)之外,这个头中没有实现;所有函数体都位于foo.cpp
中。看来,将这些行作为“未覆盖”从覆盖率报告中删除的唯一方法是将它们从标题中删除。这实际上并不影响任何事情,因为他们只是将copy/move/dtor设置为default
。实际实施或删除这些内容的任何其他地方都不会显示在覆盖率报告中。您可以使用特殊注释从覆盖率计算中排除某些行。这种行为没有记录,但很稳定。你可以:
- 排除包含
GCOVR\u EXCL\u行的行
- 排除
和GCOVR\u EXCL\u START
之间的行区域GCOVR\u EXCL\u STOP
如果您也在使用该工具,标记可以以
GCOVR
或LCOV
开头。Lcov的分支排除标记当前不受支持。您是否尝试过这样的测试代码:Foo-foo1;Foo-foo2(std::move(foo1))代码>?@PiotrNycz是的,我曾尝试在测试用例中显式调用它