使用GMOCK模拟c++中的新运算符
Mock new operator in c++ using GMOCK
是否有任何方法可以使用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倍。
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 布尔比较运算符是如何在C++中工作的
- 重载运算符new[]的行为取决于析构函数
- 如何防止clang格式在流运算符调用之间添加换行符<<