2008-12-08 4 views
17

मैं अपने यूनिट परीक्षणों में वस्तुओं को मॉक करने के लिए moq का उपयोग कर रहा हूं और मैंने साइट पर moq के बारे में देखा है कि यह कक्षाओं और इंटरफेस दोनों को नकल करने में सक्षम है।कक्षा या इंटरफ़ेस के एमओसी-आईएनजी के बीच क्या अंतर है?

मैंने दूसरे दिन अपने साथी साथी के साथ चर्चा की और उन्होंने कहा कि कक्षाओं का मज़ाक करने का कोई कारण नहीं है और मुझे केवल इंटरफेस का मज़ाक उड़ाया जाना चाहिए।

मुझे वास्तव में इसका जवाब नहीं मिला .... और मुझे moq साइट पर इसका कोई जवाब नहीं मिल रहा है।

क्या यह सच है कि किसी को भी कक्षाओं का मज़ाक नहीं करना चाहिए? मैं तब से नहीं कहूंगा जब यह सच था तो मोक इसे भी अनुमति नहीं देगा .... तो क्या ऐसा समय है जहां एक इंटरफ़ेस पर कक्षा को नकल करना बेहतर होता है? इंटरफ़ेस का मज़ाक उड़ाते हुए क्लास मॉकिंग के बीच क्या अंतर है? या यह वास्तव में सिर्फ एक वरीयता चीज है?

उत्तर

16

कक्षा का मज़ाक करना पूरी तरह से मान्य है। एमओक्यू के साथ, आप केवल कक्षा में वर्चुअल विधियों और गुणों का नकल कर सकते हैं।

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

1

यदि कक्षा इंटरफ़ेस को लागू नहीं करती है या यदि मॉकिंग फ्रेमवर्क आंशिक मैक्स की अनुमति देता है तो आप कक्षा को नकल करने में सक्षम होना चाहते हैं। पूर्व मामले में, क्योंकि नकली करने के लिए कोई इंटरफ़ेस नहीं है। उत्तरार्द्ध में, इसलिए आप कक्षा से मौजूदा व्यवहार का उत्तराधिकारी प्राप्त कर सकते हैं जिसे आप नकल नहीं करना चाहते हैं।

आमतौर पर, आप चाहते हैं कि आपकी कक्षाएं उपलब्ध होने पर इंटरफेस पर निर्भर हों। उस स्थिति में, आपको एक कक्षा का नकल करने की आवश्यकता नहीं है जो इंटरफ़ेस लागू करता है। परीक्षण के तहत कक्षा में मौजूद नहीं होने पर आपको अपने परीक्षण में किसी भी निर्भरता से बचने के लिए केवल इंटरफ़ेस को नकल करना चाहिए।

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