gpt4 book ai didi

c++ - GMock - 如何刷新模拟返回值?

转载 作者:行者123 更新时间:2023-11-30 05:30:50 24 4
gpt4 key购买 nike

我有一个类似这样的测试:

#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();
}

这将崩溃,因为正在测试的“真实”代码使用 1024 调用 DoAllocate 两次。但是 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));

关于c++ - GMock - 如何刷新模拟返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35792133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com