2016-07-21 11 views
9

में वैकल्पिक पैरामीटर के साथ एक विधि का नकल कैसे करें Google Mock? उदाहरण के लिए:,,Google मॉक में वैकल्पिक पैरामीटर के साथ विधि का नकल कैसे करें?

void set_enable(bool enabled = true) { set_enable_impl(enabled); } 

अब वर्ग MockA में set_enable_impl के लिए एक नकली विधि बनाने के लिए:: अपने विधि set_enable की

class A 
{ 
public: 
    void set_enable(bool enabled = true); 
}; 

class MockA : public A 
{ 
    MOCK_METHOD1(set_enable, void(bool)); // this is not working 
}; 

उत्तर

3

कार्यान्वयन बदलें एक सहायक विधि, इस तरह का उपयोग करने के

MOCK_METHOD1(set_enable_impl, void(bool)); 

फिर, अपने उत्पादन कोड में आप केवल set_enable का उपयोग करें जैसा कि आप पहले स्थान पर करेंगे, जबकि परीक्षणों में आप ca विधि set_enable_impl पर n सेट उम्मीदों:

MockA mockA; 
EXPECT_CALL(mockA, set_enable_impl(_))...; 

एक वैकल्पिक एक और शून्य मानकों के साथ संस्करणों होने से विधि ओवरलोड होगा। यह निर्धारित करने के लिए आप पर निर्भर है कि आपके मामले के लिए कौन सा तरीका बेहतर काम करता है।

+0

के लिए यह बेहतर होता अगर वहाँ सिर्फ परीक्षण प्रयोजन के लिए मूल कोड में कोई परिवर्तन नहीं किया गया था। वैसे भी अगर मैं कोई अन्य तरीका नहीं हूं तो मैं आपके उत्तर को सबसे अच्छा मानूंगा। – nyarlathotep108

+0

@ nyarlathotep108 एक विकल्प है, लेकिन इसे मूल कोड बदलने की भी आवश्यकता है। मेरा अद्यतन उत्तर देखें। –

+0

@ nyarlathotep108 उत्तर को चिह्नित करने पर विचार करें यदि आपको कोई बेहतर समाधान नहीं मिला है, या यदि आपने किया तो कृपया इसे हमारे साथ साझा करें। –

6

यह मार्को के जवाब के लिए एक विकल्प है: तुम सिर्फ नकली कक्षा में सहायक लागू अपने मूल कोड को बदलने के लिए नहीं करना चाहते हैं,:

class A 
{ 
public: 
    void set_enable(bool enabled = true); 
}; 

class MockA : public A 
{ 
    MOCK_METHOD1(set_enable_impl, void(bool)); 
    virtual void set_enable(bool enabled = true) 
    { 
     set_enable_impl(enabled); 
    { 
}; 

तुम अब भी में set_enable_impl की कॉल की उम्मीद है आपके परीक्षण, उदाहरण के

MockA mockA; 
EXPECT_CALL(mockA, set_enable_impl(true)).Times(Exactly(1)); 
EXPECT_CALL(mockA, set_enable_impl(false)).Times(Exactly(1)); 
+0

यह सही जवाब होना चाहिए। डिफ़ॉल्ट पैरामीटर का पूरा उद्देश्य उत्पादन कोड में अपर्याप्त ओवरलोडेड विधियों से परहेज कर रहा है। –

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