2

有没有办法使用 GMOCK 在 C++ 中模拟新运算符或重载新运算符。例如:

ptr = new Base;
ret = ptr->call();

在这里我需要 ptr 应该调用模拟函数,但是 ptr 正在使用 new 获取内存,所以我可以做些什么来模拟 new 在这里。

4

1 回答 1

1

有时你必须做一些愚蠢的事情并克服它。

要模拟 operator new,您可以重载它:https ://en.cppreference.com/w/cpp/memory/new/operator_new

new您可以通过为自由函数创建一个单独的类来模拟自由函数,例如实现,并在全局范围内构建。

然而,简单地模拟操作符是有问题的new,因为谷歌测试库也使用它。要使其适用于 的所有实例new,请使其使用变量动态更改其行为。在测试中更改此变量以启用模拟。

总而言之,它应该如下所示:

class MockFunctions
{
public:
    MOCK_CONST_METHOD1( newAllocate, void*( size_t ) );

    bool mockAllocation = false;
} mockFunctions;

void* operator new[]( size_t count )
{
    if ( mockFunctions.mockAllocation )
        return mockFunctions.newAllocate( count );

    else
        return std::malloc(count);
}

如果您能够修改正在测试的源代码,请尝试使用诸如数组和向量之类的 STL 容器来让生活轻松 100 倍。

于 2018-09-07T17:40:09.667 回答