GMock - 如何刷新模拟返回值
GMock - how to refresh mock return values?
我有一个这样的测试:
#include <gmock/gmock.h>
using namespace ::testing;
class IMyInterface
{
public:
virtual ~IMyInterface() = default;
virtual void* DoAllocate(size_t size) = 0;
};
class MockMyInterface : public IMyInterface
{
public:
MOCK_METHOD1(DoAllocate, void*(size_t));
};
class InterfaceUser
{
public:
void DoIt(IMyInterface& iface)
{
void* ptr = iface.DoAllocate(1024);
free(ptr);
ptr = iface.DoAllocate(1024);
free(ptr);
}
};
TEST(MyTest, AllocateMock)
{
MockMyInterface mockIFace;
EXPECT_CALL(mockIFace, DoAllocate(1024)).WillRepeatedly(Return(malloc(1024)));
InterfaceUser user;
user.DoIt(mockIFace);
}
int main(int numArgs, char** args)
{
::testing::InitGoogleMock(&numArgs, args);
return RUN_ALL_TESTS();
}
这将崩溃,因为正在测试的"真实"代码调用DoAllocate
两次1024
。但gmock似乎只做:
Return(malloc(1024))
一次,即使它叫了两次。显然这是一个问题,因为这意味着 malloc 被调用一次 1024,然后"真实"代码两次释放同一个指针。
如何强制 gmock 在每个模拟调用上实际执行malloc(1024)
?
通过预先分配缓冲区来设置您的期望,如下所示:
void *buffer1 = malloc(1024);
void *buffer2 = malloc(1024);
EXPECT_CALL(mockIFace, DoAllocate(1024)).Times(2)
.WillOnce(Return(buffer1))
.WillOnce(Return(buffer2));
相关文章:
- 如何使用Google Mock来模拟gettimeofday()
- G锁定铸造到基础上会释放模拟行为
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 落砂模拟碰撞检测C++和SFML
- 在gtest.中使用fff.h模拟系统API
- 谷歌模拟和覆盖关键字
- 用C#中的并集模拟C++嵌套结构
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 在模拟器中使用并集来模拟CPU寄存器有多合适
- 我写了一个C++程序来模拟Enigma机器.我没有得到输出
- 是否可以配置提升日志刷新?
- 如何在qt中同步应用程序和显示器的刷新率?
- 如何模拟不同边数的骰子滚动?
- 模拟持久按键
- 使用SIR模型的疾病爆发模拟
- 在 c++ 中模拟输入并在 JAVA 中读取它?
- 转发变量参数列表以模拟 std::thread
- 如何在谷歌模拟中匹配 C 样式数组
- 如何使用兰德随机化模拟点击
- GMock - 如何刷新模拟返回值