2013-08-21 44 views
5

Tôi đang cố đặt thông số "out" trên mô hình với SetArgPointee. Dưới đây là đoạn code tôi đang thử nghiệm:Tại sao tôi không thể sử dụng SetArgPointee() với googlemock?

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

req là một IHttpRequest*, và tôi muốn thiết lập bodysize, lập luận 3, trong mô hình. Dưới đây là các mã từ thử nghiệm đơn vị của tôi:

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

Điều này dẫn đến các lỗi lạ như sau:

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

Nếu tôi nhận xét ra .WillOnce(SetArgPointee<3>(4)), mã biên dịch và thực hiện một cách chính xác. Dưới đây là định nghĩa có liên quan trong bản thân mô hình:

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

Và, trong trường hợp nó giúp, full mock of IHttpRequest của tôi.

Trả lời

9

Hành động của bạn không phải là combined properly. Như vậy, tờ khai EXPECT_CALL của bạn thiếu Return, đó là lý do bạn gặp lỗi khi cố gắng chuyển đổi void thành long. Đảm bảo rằng bạn đang sử dụng DoAll():

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

Tôi rõ ràng không hiểu hành động trước đây, heh. Cảm ơn bạn vì sự giúp đỡ! – ladenedge

Các vấn đề liên quan