gpt4 book ai didi

c++ - 为什么我不能将 SetArgPointee() 与 googlemock 一起使用?

转载 作者:可可西里 更新时间:2023-11-01 17:37:05 34 4
gpt4 key购买 nike

我正在尝试使用 SetArgPointee 在模拟上设置“out”参数.这是我正在测试的代码:

DWORD bodysize = 1024;
char body[1024];
HRESULT hr = req->ReadEntityBody(body, bodysize, false, &bodysize, NULL);

req是一个 IHttpRequest* , 我想设置 bodysize ,参数 3,在模拟中。这是我的单元测试的代码:

EXPECT_CALL(req, ReadEntityBody(NotNull(), Ge(1024), false, NotNull(), _))
.WillOnce(SetArgPointee<3>(4))
.WillOnce(Return(ERROR_HANDLE_EOF));

这会导致以下奇怪的错误:

error C2440: 'return' : cannot convert from 'void' to 'long' (gmock/gmock-actions.h:369)

如果我注释掉 .WillOnce(SetArgPointee<3>(4)) ,代码编译并正确执行。这是模拟本身的相关定义:

MOCK_METHOD5(ReadEntityBody, HRESULT(VOID *pvBuffer, DWORD cbBuffer, BOOL fAsync, DWORD *pcbBytesReceived, BOOL *pfCompletionPending));

如果有帮助,我的 full mock of IHttpRequest .

最佳答案

你的行为不是combined properly .因此,您的 EXPECT_CALL 声明缺少 Return,这就是为什么您在尝试将 void 转换为 long 时遇到错误。确保您使用的是 DoAll():

EXPECT_CALL(req, ReadEntityBody(NotNull(), Ge(1024), false, NotNull(), _))
.WillOnce(DoAll(SetArgPointee<3>(4), Return(ERROR_HANDLE_EOF)));

关于c++ - 为什么我不能将 SetArgPointee() 与 googlemock 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18363008/

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