2013-08-21 12 views
5

मैं SetArgPointee के साथ एक नकली पर "आउट" पैरामीटर सेट करने का प्रयास कर रहा हूं। यहाँ कोड मैं परीक्षण कर रहा हूँ है:मैं googlemock के साथ SetArgPointee() का उपयोग क्यों नहीं कर सकता?

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: यहाँ नकली अपने आप में प्रासंगिक परिभाषा है।

उत्तर

9

आपकी गतिविधियां 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))); 
+0

मैं स्पष्ट रूप से अब पहले क्रियाओं को समझ नहीं पाया था, हे। सहायता के लिए धनयवाद! – ladenedge

संबंधित मुद्दे