使用GMOCK在c ++中模拟new运算符

问题描述 投票:2回答:1

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

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

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

c++ operator-overloading new-operator googletest gmock
1个回答
0
投票

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

要模拟运算符new,你可以重载它:https://en.cppreference.com/w/cpp/memory/new/operator_new

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

然而,简单地模拟new运算符存在一个问题,因为Google Test库也使用它。要使它适用于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倍。

© www.soinside.com 2019 - 2024. All rights reserved.