2011-06-14 20 views
8

बस सी ++ के साथ यूनिट परीक्षण में शामिल होना। ऐसा लगता है कि मैं साथ-साथ कई स्टब कक्षाएं लिखने की आवश्यकता होगी। मेरी समझ है कि मोक्स और स्टब्स के बीच एक अंतर है। असल में ऐसा लगता है कि जब आप ऑब्जेक्ट पर कुछ हुआ (उदाहरण के लिए सत्यापित) परीक्षण करते हैं तो स्टॉक्स केवल आपके परीक्षण की सुविधा प्रदान करते हैं। मुझे मजाक करने का अनुमान है, मैं googlemock का उपयोग कर सकता हूं लेकिन मुझे स्टब्स बनाने के लिए इसमें कुछ भी दिखाई नहीं देता है (एला राइनोमोक्स जेनरेटस्ट्यूब)।सी ++ यूनिट परीक्षण: स्टब्स (मोक्स नहीं)?

क्या स्वचालित रूप से जेनरेट किए गए स्टब्स प्राप्त करने का कोई तरीका है? क्या googlemock को स्टब्स के लिए कोई समर्थन है? या क्या मुझे परीक्षण के लिए मैन्युअल रूप से स्टब्स बनाना है?

+0

यकीन नहीं है लेकिन मुझे लगता है कि बूस्ट में यूनिट टेस्ट लाइब्रेरी है। दुर्भाग्यवश मुझे अकेलेगाइंड के साथ स्वीकार करना है मैंने कभी यूनिट परीक्षण के लिए कोड नहीं लिखा है। – AJG85

+0

क्या कोई जनरेटर पायथन लिपि नहीं है जो कुछ नकली कक्षाएं उत्पन्न कर सकता है? – Nim

+1

@aloneguid: गंभीरता से? मुझे विश्वास नहीं है। वास्तविक सी ++ लोग अपने आवेदन के लिए जो भी परीक्षण उपयुक्त हैं उनका उपयोग करते हैं। –

उत्तर

16

मुझे लगता है कि पहेली का लापता टुकड़ा यह है कि आपको किसी विधि पर अपेक्षा निर्धारित करने की आवश्यकता नहीं है और इसके बजाय आप केवल डिफ़ॉल्ट वापसी मान सेट कर सकते हैं।

Mocks

सभी चर्चा और "Google Mock for Dummies" में उदाहरण उम्मीदों की स्थापना के आसपास केंद्रित है। कुछ निम्न के समान कोड का उपयोग कर के बारे में सब कुछ वार्ता:

EXPECT_CALL(turtle, PenDown()) 
     .Times(AtLeast(1)); 

है जो तुम मजाक है, लेकिन छोटा करते आप किसी भी उम्मीदों की जरूरत नहीं है के लिए के लिए क्या चाहते हैं। उस परिचय को पढ़ने के बाद मुझे कोई संकेत नहीं था कि स्टबिंग के लिए googlemock का उपयोग कैसे करें।

स्टब्स

ratkok की टिप्पणी मुझे पता लगाने के लिए एक डिफ़ॉल्ट वापसी मान सेट करने के लिए नेतृत्व किया। यहाँ कैसे एक मज़ाक उड़ाया वस्तु लेकिन कोई उम्मीद के लिए एक वापसी मान निर्दिष्ट करने के लिए है:

ON_CALL(foo, Sign(_)) 
     .WillByDefault(Return(-1)); 

http://code.google.com/p/googlemock/wiki/CookBook#Setting_the_Default_Actions_for_a_Mock_Method

ऐसा प्रतीत होता है googlemock एक चेतावनी जारी करेगा अगर आप एक विधि नहीं EXPECT_CALL है कि कहते हैं। जाहिर है आप अपने NiceMock निर्माण का उपयोग कर इस चेतावनी को रोक सकते हैं या आप इसे अनदेखा कर सकते हैं। इसके अतिरिक्त ऐसा लगता है कि आप इसके बजाय उम्मीद का उपयोग कर चेतावनी से बच सकते हैं (जो मुझे यकीन नहीं है कि यह स्टब्स के लिए एक अच्छा विचार है)। Google Mock FAQ से:

EXPECT_CALL(foo, Bar(_)) 
    .WillRepeatedly(...); 

मुझे विश्वास है कि है कि वास्तव में क्या मैं यह पता लगाने की कोशिश कर रहा था।

अद्यतन

मैं पुष्टि कर सकता यह काम करता है। मैंने googlemock के साथ Google परीक्षण का उपयोग करके एक यूनिट टेस्ट लिखा और ON_CALL का उपयोग कर कक्षा के लिए एक विधि को स्टब करने में सक्षम था।

+0

हां, ON_CALL() और नाइसमॉक का उपयोग करना ठीक वही है जो मैं भी संदर्भित कर रहा था। उन विकी पेजों (Google मॉक) की जांच करें - यह मॉकिंग फ्रेमवर्क वास्तव में काफी शक्तिशाली और लचीला है। – ratkok

3

एक मॉक और स्टब के बीच एकमात्र अंतर यह है कि एक मॉक व्यवहार को लागू करता है, जबकि एक स्टब नहीं करता है।

जहां तक ​​मुझे पता है, Google Mock के mocks वास्तव में डिफ़ॉल्ट रूप से stubs हैं। यदि आप विभिन्न विधियों पर दावा करते हैं तो वे केवल व्यवहार को लागू करते हैं।

+0

मुझे लगता है कि मैं किस बारे में उलझन में हूं, मैं एक स्टब व्यवहार को परिभाषित करना चाहता हूं। उदाहरण के लिए एक विधि IsValidUser() जो सच हो जाएगी। मैं IsValidUser पर एक उत्पीड़न नहीं बनाना चाहता क्योंकि मैं कुछ और परीक्षण करना चाहता हूं और IsValidUser केवल किसी अन्य विधि का परीक्षण करने की निर्भरता है। लेकिन googlemocks में सब कुछ – User

+1

की उम्मीद बनाने के लिए उन्मुख लगता है, आप डिफ़ॉल्ट मान/व्यवहार प्रदान करके Google मॉक में अपेक्षाओं को सेट करने से बच सकते हैं। साथ ही, Google मॉक फ्रेमवर्क आपको अप्रत्याशित कॉलों को अनदेखा करने देता है ताकि उम्मीदें मौजूद न हों तो आपके परीक्षण विफल नहीं होंगे। – ratkok

0

here कवर किया गया है मेरा मानना ​​है कि

0

इस पर एक नज़र डालें: stubgen और इसी तरह की चर्चा here

This question शायद उपयोगी/संबंधित भी।

Google मैक्स के संबंध में - हम इसे वर्तमान प्रोजेक्ट पर स्टब कार्यान्वयन को स्वचालित रूप से स्वचालित करने के लिए उपयोग करते हैं। वस्तुतः पूरे स्टब कोड बेस को Google mocks का उपयोग करके कार्यान्वित किया जाता है।

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