2011-03-10 2 views
5

मैं एक वर्ग और विधि निम्नलिखित छद्म कोड के साथ परिभाषित किया गया है कहोयह सत्यापित करने के लिए कोई भी तरीका है कि mocks या stubs मान्य हैं?

class Book 
    def quick_info 
    return title + " " + author 
    end 
end 

मैं इस Book वर्ग का उपयोग करता है मैं के लिए एक ठूंठ बना सकते हैं कुछ अन्य वर्ग पर एक इकाई परीक्षण लिख रहा हूँ तो Book.quick_info पर विधि कॉल करें।

अब मुझे लगता है कि अगर मेरी Book कक्षा बदलनी है, तो समस्या उत्पन्न होगी, उदाहरण के लिए यदि quick_info विधि का नाम बदलकर short_description कर दिया गया था। मेरा यूनिट परीक्षण अभी भी quick_info का उपयोग करेगा और ऐसा लगता है कि मेरे परीक्षण ठीक से गुजर रहे हैं जब वास्तव में यह असफल होना चाहिए।

मैं सोच रहा था कि ऐसा कुछ है जो यह सत्यापित करने के लिए चलाया जा सकता है कि मेरे परीक्षण में स्टब्स/मैक्स वास्तव में सही कक्षाओं और विधियों से बने थे। हो सकता है कि इस तरह की चीज एक निरंतर एकीकरण सर्वर पर चल सके, यह सत्यापित करने के लिए कि चीजें मिलती हैं?

हरम .... और अब एक विचार सिर्फ मेरे लिए हुआ। क्या एक नकली/स्टबबड विधि बनाना संभव है जो अस्तित्व में नहीं है? यदि नहीं, तो यह पूरा सवाल मंथन है।

संपादित करें:

मैं सिर्फ rspec 2 और मैं जानता हूँ कि मैं एक Book उदाहरण बना सकते हैं और एक विधि i_dont_exist नामित बना सकते हैं और मैं इसे ठीक कर सकते हैं कर सकते हैं का उपयोग कर इस फोन करने की कोशिश की है। तो मेरा सवाल अभी भी खड़ा है। क्या मेरे मॉक्स/स्टब्स वास्तव में वहां मौजूद कक्षाओं/वस्तुओं से मेल खाने का कोई तरीका है? हालांकि यह किसी मौजूदा ऑब्जेक्ट नकली करने की आवश्यकता है

Mocha::Configuration.prevent(:stubbing_non_existent_method) 

:

उत्तर

4

मोचा इस के लिए एक विकल्प है। यदि आप 'स्क्रैच' से नकली बना रहे हैं तो यह काम नहीं करेगा (क्योंकि इसमें कोई जानकारी नहीं है कि वहां कौन सी विधियां होनी चाहिए)।

सर्वोत्तम प्रथाओं के संदर्भ में, आईएमएचओ आप इसे गलत दिशा से देख रहे हैं। आपके पास बुक क्लास पर यूनिट टेस्ट भी होना चाहिए, इसलिए जब आप विधि का नाम बदलते हैं तो आपको परीक्षण विफलता मिल जाएगी। इस विधि को और अधिक कॉल करने के लिए यह देखने के लिए कोड को 'grep' करने के लिए पर्याप्त पर्याप्त संकेत होना चाहिए।

इसके अलावा (जब तक यह केवल एक उदाहरण नहीं है) आप फिर भी पुस्तक का नकल क्यों करना चाहते हैं? यह सिर्फ एक डेटा है - आप आमतौर पर बाहरी सेवाओं का नकल करना चाहते हैं और ऐसे में अपने परीक्षणों में वास्तविक डेटा ऑब्जेक्ट्स के साथ काम करना चाहते हैं।

+0

जैसा कि आपने बताया है, समस्या यह है कि बाहरी सेवाओं को आम तौर पर मजाक किया जाता है (उदाहरण के लिए एक वेब सेवा) जिस स्थिति में मेरे पास यूनिट टेस्ट नहीं होता है। लेकिन शायद यह एकीकरण परीक्षण द्वारा कवर किया जाना चाहिए? 'बुक' के लिए इसका इस्तेमाल सिर्फ मेरे उदाहरण को स्पष्ट करने के लिए किया गया था ... लेकिन मुझे लगता है कि यह एक बुरा उदाहरण था। – Fendo

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

  • कोई संबंधित समस्या नहीं^_^