【发布时间】:2013-08-24 03:42:29
【问题描述】:
我正在尝试使用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));
这会导致以下奇怪的错误:
错误 C2440: 'return' : 无法从 'void' 转换为 '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。
【问题讨论】:
标签: c++ unit-testing googlemock