使用GMOCK模拟c++中的新运算符

Mock new operator in c++ using GMOCK

本文关键字:运算符 c++ GMOCK 模拟 使用      更新时间:2023-10-16

是否有任何方法可以使用GMOCK在C++中模拟新运算符或重载新运算符。例如:

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

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

有些时候,你不得不做一些愚蠢的事情来克服。

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

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

然而,简单地嘲笑new运算符是有问题的,因为Google测试库也使用它。要使它适用于new的所有实例,请使用变量动态更改其行为。在测试中更改此变量以启用mocking。

把它们放在一起,应该是这样的:

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倍。