दो बयानों के बीच सूक्ष्म लेकिन महत्वपूर्ण मतभेद रहे हैं। EXPECT_CALL
एक नकली कॉल पर उम्मीद सेट करता है।
EXPECT_CALL(mock, methodX(_)).WillRepeatedly(do_action);
लेखन gMock बताता है कि methodX
mock
पर किसी भी तर्क के साथ कितनी भी बार बुलाया जा सकता है, और जब यह है, mock
do_action
प्रदर्शन करेंगे। दूसरी ओर,
ON_CALL(mock, methodX(_)).WillByDefault(do_action);
gMock बताता है कि जब भी methodX
mock
पर शुरू हो जाती है, यह do_action
प्रदर्शन करना चाहिए। यह सुविधा एक परिदृश्य में सहायक है जहां आपको अपने नकली पर कई उम्मीदें लिखनी होंगी, और उनमें से अधिकांश को एक ही कार्रवाई निर्दिष्ट करनी होगी - खासकर यदि यह जटिल है। आप ON_CALL
में उस क्रिया को निर्दिष्ट कर सकते हैं, और उसके बाद कार्रवाई को स्पष्ट किए बिना EXPECT_CALL
लिख सकते हैं। जैसे,
ON_CALL(mock, Sign(Eq(0), _))
.WillByDefault(DoAll(SetArgPointee<1>("argument is zero"), Return(0)));
ON_CALL(mock, Sign(Gt(0), _))
.WillByDefault(DoAll(SetArgPointee<1>("argument is positive"), Return(1)));
ON_CALL(mock, Sign(Lt(0), _))
.WillByDefault(DoAll(SetArgPointee<1>("argument is negative"), Return(-1)));
अब, अगर आप EXPECT_CALL
रों का एक बहुत लिखने के लिए है, तो आप mock
की जरूरत नहीं है के व्यवहार हर बार निर्दिष्ट करें:
EXPECT_CALL(mock, Sign(-4, _));
EXPECT_CALL(mock, Sign(0, _));
EXPECT_CALL(mock, Sign(1, _)).Times(2);
EXPECT_CALL(mock, Sign(2, _));
EXPECT_CALL(mock, Sign(3, _));
EXPECT_CALL(mock, Sign(5, _));
अन्य उदाहरण में, साइन रिटर्न संभालने int
, यदि आप लिखना
ON_CALL(mock, Sign(Gt(0), _)).WillByDefault(Return(1));
EXPECT_CALL(mock, Sign(10, _));
कॉल mock.Sign(10)
वापस आ जाएगी 1 ON_CALL
के रूप में एक के लिए डिफ़ॉल्ट व्यवहार प्रदान करता है कॉल EXPECT_CALL
द्वारा निर्दिष्ट है। लेकिन अगर आप लिखना
EXPECT_CALL(mock, Sign(Gt(0), _).WillRepeatedly(Return(1));
EXPECT_CALL(mock, Sign(10, _));
mock.Sign(10, p)
के आह्वान 0. वापस आ जाएगी यह दूसरी उम्मीद के खिलाफ मिलान किया जाएगा। यह उम्मीद कोई स्पष्ट कार्रवाई निर्दिष्ट नहीं करती है और gMock इसके लिए एक डिफ़ॉल्ट कार्रवाई उत्पन्न करेगा। वह डिफ़ॉल्ट कार्रवाई रिटर्न प्रकार का डिफ़ॉल्ट मान वापस करना है, जो int
के लिए 0 है। इस मामले में पहली उम्मीद पूरी तरह नजरअंदाज कर दी जाएगी।
लेकिन ऐसा लगता है कि जब मैं एक OPPALL के साथ पहले EXPECT_CALL के साथ परिभाषित डिफ़ॉल्ट क्रिया को ओवरराइड करने का प्रयास करता हूं तो यह काम नहीं करता है। कोई उपाय? – Nicoretti
@ निकोरेटी नहीं, यह काम नहीं करता है। मुझे यह भी यकीन नहीं है कि यदि आप दोनों सेट करते हैं तो क्या होगा। शायद उस मामले में केवल एक ही निष्पादित हो जाता है। बीटीडब्ल्यू gtest में एक [सेक्शन] (http://code.google.com/p/googlemock/wiki/CheatSheet#Setting_Default_Actions) है जो एक डिफ़ॉल्ट व्यवहार को सेट करने का तरीका बताता है। –
हाँ ने इसे देखा लेकिन मैं इस तथ्य के कारण उत्सुक और उलझन में था कि EXPECT_CALL का उपयोग डिफ़ॉल्ट व्यवहार को संशोधित करने के लिए किया जा सकता है। और दस्तावेज़ दोनों पक्षों का उपयोग करते समय दुष्प्रभाव/प्राथमिकता के बारे में कुछ भी नहीं कहते हैं। – Nicoretti