क्या मुझे नकली परीक्षण वस्तुओं के निर्माण को सरल बनाने के लिए आधार के रूप में शुद्ध इंटरफ़ेस वर्ग का उपयोग करके कक्षाओं को लागू करना चाहिए?
- इससे मुझे कई वर्चुअल तरीकों को बनाने में मजबूर होना पड़ेगा। क्या यह प्रदर्शन को प्रभावित करेगा?
का संभावित हल मैं अक्सर उपयोग एक अंतरफलक के पीछे छिपा के बजाय वर्ग templatize है। फिर परीक्षण के दौरान टेम्प्लेट पैरामीटर के रूप में परीक्षण/नकली ऑब्जेक्ट्स पास कर सकते हैं, और अन्यथा वास्तविक वस्तुएं। इस तरह, आभासी कार्यों का प्रदर्शन हिट से बचा जाता है।
संपादित
ठीक है, एक सरल उदाहरण:
OOP और इंटरफेस के साथ, आप इस जैसे एक समारोह में लिख सकते हैं:
void Foo(IBar& someBar) { ... }
यह फ़ंक्शन पैरामीटर जो IBar
इंटरफ़ेस लागू करता है लेता है , और इसके साथ कुछ करता है। यदि आप एक डमी मॉक कार्यान्वयन में गुजरना चाहते हैं, तो आप बस एक नकली वस्तु लिखते हैं जो IBar
से प्राप्त होता है और इसे Foo
पर भेजता है। सरल और सीधा।
लेकिन आप टेम्पलेट के साथ एक ही बात को प्राप्त कर सकते:
template <typename BarType>
void Foo(BarType& someBar) { ... }
... और बस इतना ही। Foo
का शरीर काफी अपरिवर्तित हो सकता है। जब तक फ़ंक्शन में पारित प्रकार हमारे सदस्यों की आवश्यकता होती है, तब तक यह काम करेगा, बिना किसी इंटरफ़ेस क्लास से औपचारिक रूप से उत्तराधिकारी और बिना वर्चुअल फ़ंक्शंस और रनटाइम पॉलीमोर्फिज्म के ओवरहेड के।
वास्तव में परीक्षण योग्यता के लिए डिजाइन करना आवश्यक है। हालांकि आपको यह भी महसूस करना होगा कि स्टैंड-अलोन फैशन में केवल 'सीमा' का परीक्षण किया जाना चाहिए, आंतरिक घटकों के लिए यह एक दूसरे पर निर्भर होना उचित है और अलगाव में परीक्षण नहीं किया जाना चाहिए। –
आपको इस [स्टैक-एक्सचेंज प्रस्ताव] में रुचि हो सकती है (http://area51.stackexchange.com/proposals/11464/code-review?referrer=aWNm_PdciyFqjFW8CUacGw2 "कोड समीक्षा")। यह बीटा शुरू करने के लिए लगभग तैयार है, बस कुछ और की जरूरत है। – greatwolf