首页 > 解决方案 > 如何让 gtest 框架完全覆盖而不是部分覆盖“新”和“删除”。与 2015 年相比

问题描述

我正在使用谷歌测试框架对我的代码进行单元测试,但遇到了一个非常奇怪的问题。

我注意到任何包含动态分配(新建和删除)的行都没有得到完全覆盖,即使代码通过这些行运行。

我做了一个简单的例子来演示这个问题:假设我有以下类:

class DummyClass // fully covered
{
public:
    int x;
    DummyClass() { x = 5; }; // fully covered
    ~DummyClass() { }; // fully covered
};

现在我有以下函数可以静态和动态地分配这个类:

static void CoverageFunctionTest()
{
    // any logic here
    DummyClass staticVar1; // fully covered
    DummyClass* dynamicVar = new DummyClass();  // partially covered
    // any logic here
    DummyClass staticVar2; // fully covered
    delete dynamicVar;  // partially covered
}

带有“new”关键字的行和带有“delete”关键字的行被认为是部分覆盖而不是完全覆盖。

这个函数的覆盖率为:88.24%,即使我们覆盖了其中的每一行,类的覆盖率为 100%。

我怎样才能获得 100% 的代码覆盖率?

泰!

标签: c++code-coveragegoogletest

解决方案


推荐阅读