在运行时禁用gcov覆盖

时间:2016-09-07 11:24:53

标签: c++ gcov

我正在用C ++编写一些测试,并且我使用gcov(实际上是lcov,但我认为它不是重点)来获取有关覆盖的信息。

有没有办法在运行时禁用信息记录? 例如。 :

bool myTest() {
    ObjectToTest obj;

    /* Enable gcov... */

    obj.FunctionToTest();

    /* ...Disable gcov */

    if(obj.GetStatus() != WHATEVER)
        return false;
    else
        return true;
}

在这种情况下,我希望gcov显示为"覆盖"只是FunctionToTest但保留了ObjectToTest构造函数和GetStatus"未覆盖"。

提前致谢!

2 个答案:

答案 0 :(得分:1)

不,如果是gcov我们没有这样的选择。

我在一些覆盖工具中看到过这样的选项,例如clover,它通过直接检测源代码来工作。

除了您的问题的解决方案之外,将该部分代码写入不同的源文件,然后通过包含它来在所需的源文件中调用它。
我建议这样做是因为当您稍后使用LCOV或GCOVR生成覆盖率报告时,它们都提供了通过将指定文件传递到某些交换机来从覆盖率报告中排除指定文件的选项。

LCOV:

stdin

GCOVR:

P2

答案 1 :(得分:0)

尽管我同意@VikasTawniya所说的话,但是您也可以模拟不希望在测试代码中跟踪的功能。

 #ifdev NO_COV
 #include mock.h // mock of obj.FunctionToTest(); does nothing
 #else 
 #include real.h // real implementation of obj.FunctionToTest();
 #endif

现在,obj.FunctionToTest()的呼叫不会破坏您的承保范围结果