lad*_*dge 8 c++ unit-testing googlemock
我试图在模拟器上设置一个"out"参数SetArgPointee.这是我正在测试的代码:
DWORD bodysize = 1024;
char body[1024];
HRESULT hr = req->ReadEntityBody(body, bodysize, false, &bodysize, NULL);
Run Code Online (Sandbox Code Playgroud)
req是一个IHttpRequest*,我想bodysize在mock中设置参数3.这是我单元测试的代码:
EXPECT_CALL(req, ReadEntityBody(NotNull(), Ge(1024), false, NotNull(), _))
.WillOnce(SetArgPointee<3>(4))
.WillOnce(Return(ERROR_HANDLE_EOF));
Run Code Online (Sandbox Code Playgroud)
这导致以下奇怪的错误:
错误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));
Run Code Online (Sandbox Code Playgroud)
并且,如果有帮助,我完全嘲笑IHttpRequest.
RA.*_*RA. 12
您的行为未正确合并.因此,您的EXPECT_CALL声明缺少a Return,这就是为什么您收到有关尝试转换void为的错误的原因long.确保您使用的是DoAll():
EXPECT_CALL(req, ReadEntityBody(NotNull(), Ge(1024), false, NotNull(), _))
.WillOnce(DoAll(SetArgPointee<3>(4), Return(ERROR_HANDLE_EOF)));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8620 次 |
| 最近记录: |