2009-12-25 9 views
5

मैं मोक का उपयोग करना चाहता हूं, लेकिन मैं निबर्ननेट का उपयोग कर रहा हूं और मैंने अपने सभी मॉडल वर्गों (पीओसीओ कक्षाओं) के लिए इंटरफेस नहीं बनाए हैं।मेरे लिए Moq का उपयोग करने के लिए, क्या मेरे सभी वर्गों को एक इंटरफ़ेस लागू करना है?

क्या मुझे अपने पॉको कक्षाओं को moq करने में सक्षम होने के लिए प्रत्येक कक्षा के लिए एक इंटरफ़ेस बनाना है?

+1

आपने अभी यह पूछा है। Http://stackoverflow.com/questions/1961778/help-with-this-unit-test-using-moq –

+0

दोहराना न करें, यदि आप कर सकते हैं तो मैं आपके अन्य प्रश्न को बंद/हटाने की सलाह दूंगा। यहां दिए गए जवाब आप चाहते हैं। कोई बिंदु डुप्लिकेट नहीं। – Finglas

+0

चलो इसे बंद करने के बजाए अपना दूसरा प्रश्न बंद करें - यह स्पष्ट लगता है, और दूसरों के लिए मूल्य हो सकता है। – TrueWill

उत्तर

8

आप वर्चुअल विधियों का नकल कर सकते हैं, लेकिन यदि आप इंटरफ़ेस का उपयोग करते हैं तो सर्वोत्तम

कारण मैं कहता हूँ इस प्रकार है:

var mockObject = new Mock<IMyObject>(); 

आप एक आभासी विधि का उपयोग करें यदि यह हो जाता है:

var mockObject = new Mock<MyObject>(params...); 

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

मुझे ठोस प्रकारों का नकल करने के प्रयास में जोड़ना चाहिए जो आप ढांचे के मजाक के उद्देश्य को हरा रहे हैं। आपको mocking roles, not types होना चाहिए। इसलिए एक अमूर्त कार्य करने के लिए, इस मामले में एक इंटरफ़ेस करना एक बड़ी बात है।

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

+0

मैं इंटरफेस का पक्ष लेने के लिए सहमत हूं। ऐसे कुछ मामले हैं जहां अमूर्त वर्ग अधिक समझ में आते हैं, हालांकि (जैसे टेम्पलेट विधि पैटर्न)। हमेशा की तरह, ये दिशानिर्देश हैं - अपने निर्णय का प्रयोग करें। – TrueWill

1

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

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

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