2011-03-02 2 views
28

मुझे वास्तव में समझ में नहीं आता कि मोक्स और स्टब्स क्या हैं। मैं जानना चाहता हूं कि हमारे परीक्षण मामलों में कब और क्यों हम मोक्स का उपयोग करते हैं। मुझे पता है कि रूबी पर रूबी में मोक्स और स्टब्स के लिए अच्छे ढांचे हैं, लेकिन उद्देश्य को जानने के बिना, मैं अपने ऐप में उनका उपयोग करने में अनिच्छुक हूं।मोजे और स्टब्स

क्या आप मॉक्स और स्टब्स के बारे में स्पष्टीकरण दे सकते हैं? कृपया मदद करे।

उत्तर

2

व्यवहार को सत्यापित करने के लिए इंटरैक्शन-आधारित परीक्षण में मोक्स का उपयोग किया जाता है। एक नकली के साथ, आप जोर दे सकते हैं कि परीक्षण के तहत विधि एक और विधि कहा जाता है। उदाहरण के लिए, मैं यह सुनिश्चित करना चाहता हूं कि नियंत्रक ऑब्जेक्ट कुछ डेटा प्राप्त करने के लिए एक संग्रह को कॉल करता है।

स्टब्स का उपयोग राज्य-आधारित परीक्षण में एक निश्चित अनुप्रयोग स्थिति स्थापित करने के लिए किया जाता है। मोक्स के विपरीत, आप चिंता नहीं करते हैं कि कॉल किया गया था या नहीं। उदाहरण के लिए, यदि आप कुछ रिपॉजिटरी कोड का परीक्षण कर रहे थे, तो आप यह सुनिश्चित करने के लिए एक स्टब विधि सेट अप करना चाहेंगे कि डेटाबेस कनेक्शन बंद होने पर रिपोजिटरी सही ढंग से केस को संभालती है।

59

मेरे बहुत सरल जवाब है:

  • का मजाक उड़ाता है वस्तुओं नकली तरीकों
  • स्टब्स कुछ और के रूप में एक समान इंटरफेस हो रहे हैं और एक विशिष्ट जवाब वापसी कर रहे हैं

के साथ हम दोनों एक ही चीज़ को प्राप्त करने की कोशिश कर रहे हैं: हम अलगाव में एक विशिष्ट इकाई (मॉडल/दृश्य/नियंत्रक/मॉड्यूल) का परीक्षण करना चाहते हैं। जैसे जब हम नियंत्रक का परीक्षण कर रहे हैं, हम अपने मॉडल का परीक्षण नहीं करना चाहते हैं, इसलिए हम एक नकली का उपयोग करते हैं। हम यह सुनिश्चित करना चाहते हैं कि सही तरीकों को बुलाया जाए, उदा। find। तो हमारे नकली पर, हमारे पास एक स्टब है जो कुछ पूर्वनिर्धारित वापस लौटाएगा, वास्तव में डेटाबेस पर जाये बिना।

तो हम उम्मीदों के लिए परीक्षण करते हैं: जिन तरीकों से हम उन्हें कॉल करने की उम्मीद करते हैं (अन्य इकाइयों पर), वास्तव में उन्हें कॉल किए बिना। उस विशिष्ट विधि का परीक्षण, अपने परीक्षण में शामिल किया जाना चाहिए था।

+1

भयानक समझाया गया! –

+0

उत्कृष्ट स्पष्टीकरण! उस सामान से संघर्ष कर रहा था, इसे पाने में वाकई खुशी हुई। –

14

फाउलर के लेख mocks are not stubs के अनुसार, स्टब्स बाहरी कॉल से स्वतंत्र नकली विधियां हैं, जबकि नकली कॉल के लिए प्री-प्रोग्रामेड प्रतिक्रियाओं के साथ नकली वस्तुएं हैं। अगर कुछ मापदंडों पारित कर रहे हैं, तो वस्तु निश्चित परिणाम देता है:

मजाक अधिक विशिष्ट और वस्तु से संबंधित है। किसी ऑब्जेक्ट का व्यवहार अनुकरण या "मजाक" होता है।

स्टबिंग अधिक सामान्य और विधि से संबंधित है: एक स्टबड विधि आमतौर पर सभी पैरामीटर के लिए हमेशा एक ही परिणाम देता है। एक विधि का व्यवहार जमे हुए, डिब्बाबंद या "stubbed" है।