कार्यान्वयन पर परीक्षण के लिए इंटरफ़ेस के परीक्षण को प्राथमिकता दें।
यह मेरी समझ है कि निजी तरीके अप्राप्य हैं
यह आपके विकास के वातावरण पर निर्भर करता है, नीचे देखें।
[निजी तरीकों] के बारे में चिंतित नहीं होना चाहिए क्योंकि सार्वजनिक एपीआई किसी वस्तु की अखंडता की पुष्टि करने के लिए पर्याप्त जानकारी प्रदान करेगा।
यह सही है, टीडीडी इंटरफ़ेस का परीक्षण करने पर ध्यान केंद्रित करता है।
निजी तरीके एक कार्यान्वयन विवरण हैं जो किसी भी पुन: कारक चक्र के दौरान बदल सकते हैं। इंटरफ़ेस या ब्लैक-बॉक्स व्यवहार को बदलने के बिना पुन: कारक होना संभव है । वास्तव में, यह टीडीडी के लाभ का हिस्सा है, जिस आसानी से आप यह विश्वास पैदा कर सकते हैं कि किसी वर्ग में आंतरिक परिवर्तन उस वर्ग के उपयोगकर्ताओं को प्रभावित नहीं करेगा।
खैर, मेरे लिए यह संभव है कि मैं एक ऐसी वस्तु बनाऊं जिसमें केवल निजी तरीके हों और उनकी घटनाओं को सुनकर अन्य वस्तुओं के साथ बातचीत करें। यह बहुत ही संक्षिप्त होगा, लेकिन पूरी तरह से अप्राप्य।
यहां तक कि अगर क्लास में कोई सार्वजनिक तरीका नहीं है, तो यह इवेंट हैंडलर है, यह सार्वजनिक इंटरफ़ेस है , और यह उस सार्वजनिक इंटरफ़ेस के खिलाफ है जिसे आप परीक्षण कर सकते हैं।
चूँकि घटनाएँ इंटरफ़ेस हैं, तो यह वह घटनाएँ हैं जिन्हें आपको उस वस्तु का परीक्षण करने के लिए उत्पन्न करना होगा।
अपने परीक्षण प्रणाली के लिए गोंद के रूप में नकली वस्तुओं का उपयोग करें। एक साधारण मॉक ऑब्जेक्ट बनाना संभव होना चाहिए जो एक घटना उत्पन्न करता है और राज्य के परिणामी परिवर्तन को चुनता है (एक अन्य रिसीवर मॉक ऑब्जेक्ट द्वारा संभव है)।
इसके अलावा, परीक्षण के लिए तरीकों को जोड़ना बुरा व्यवहार माना जाता है।
बिल्कुल, आपको आंतरिक स्थिति को उजागर करने से बहुत सावधान रहना चाहिए ।
इसका मतलब यह है कि TDD एनकैप्सुलेशन के साथ बाधाओं पर है? उचित संतुलन क्या है?
बिलकुल नहीं।
टीडीडी को शायद आपकी कक्षाओं के कार्यान्वयन को बदलने की तुलना में उन्हें सरल नहीं करना चाहिए ( पहले के बिंदु से YAGNI को लागू करके )।
टीडीडी के साथ सबसे अच्छा अभ्यास टीडीडी के बिना सर्वोत्तम अभ्यास के समान है, आप बस यह पता लगा सकते हैं कि क्यों जल्दी, क्योंकि आप इंटरफ़ेस का उपयोग कर रहे हैं क्योंकि आप इसे विकसित कर रहे हैं।
मैं अपने सभी तरीकों को अब सार्वजनिक करने के लिए इच्छुक हूं ...
यह स्नान के पानी के साथ बच्चे को बाहर फेंकना होगा।
आपको सभी विधियों को सार्वजनिक करने की आवश्यकता नहीं है ताकि आप TDD तरीके से विकसित हो सकें। यह देखने के लिए कि मेरे निजी तरीके वास्तव में अप्राप्य हैं या नहीं, नीचे मेरे नोट्स देखें।
निजी तरीकों के परीक्षण पर एक अधिक विस्तृत नज़र
यदि आपको भाषा / परिवेश के आधार पर किसी कक्षा के कुछ निजी व्यवहार का परीक्षण करना चाहिए , तो आपके पास तीन विकल्प हो सकते हैं:
- आप जिस कक्षा में परीक्षा देना चाहते हैं, उसमें परीक्षाएं डालें।
- परीक्षण को किसी अन्य कक्षा / स्रोत फ़ाइल में रखें और उन निजी तरीकों को उजागर करें जिन्हें आप सार्वजनिक विधियों के रूप में परीक्षण करना चाहते हैं।
- एक परीक्षण वातावरण का उपयोग करें जो आपको परीक्षण और उत्पादन कोड को अलग रखने की अनुमति देता है, फिर भी उत्पादन कोड के निजी तरीकों के परीक्षण कोड तक पहुंच की अनुमति देता है।
जाहिर है तीसरा विकल्प अब तक का सबसे अच्छा है।
1) आप जिस कक्षा में परीक्षा देना चाहते हैं, उसमें परीक्षाएँ डालें (आदर्श नहीं)
परीक्षण के तहत उत्पादन कोड के रूप में एक ही कक्षा / स्रोत फ़ाइल में परीक्षण के मामलों को संग्रहीत करना सबसे सरल विकल्प है। लेकिन बहुत सारे प्री-प्रोसेसर निर्देशों या एनोटेशन के बिना आप अपने परीक्षण कोड को अपने उत्पादन कोड को अनावश्यक रूप से नष्ट करने के साथ समाप्त कर देंगे, और इस पर निर्भर करते हुए कि आपने अपना कोड कैसे संरचित किया है, आप उस कोड के उपयोगकर्ताओं के लिए गलती से आंतरिक कार्यान्वयन को समाप्त कर सकते हैं।
2) उन निजी तरीकों को उजागर करें जिन्हें आप सार्वजनिक तरीकों के रूप में परीक्षण करना चाहते हैं (वास्तव में एक अच्छा विचार नहीं)
जैसा कि यह सुझाव दिया गया है कि यह बहुत खराब अभ्यास है, इनकैप्सुलेशन को नष्ट करता है और कोड के उपयोगकर्ताओं के लिए आंतरिक कार्यान्वयन को उजागर करेगा ।
3) बेहतर परीक्षण वातावरण का उपयोग करें (सबसे अच्छा विकल्प, यदि यह उपलब्ध है)
ग्रहण की दुनिया में, 3. अंशों का उपयोग करके प्राप्त किया जा सकता है । C # दुनिया में, हम आंशिक वर्गों का उपयोग कर सकते हैं । अन्य भाषाओं / वातावरणों में अक्सर समान कार्यक्षमता होती है, बस आपको इसे खोजने की आवश्यकता है।
ब्लाइंडली मानने वाले 1. या 2. एकमात्र विकल्प हैं जिसके परिणामस्वरूप उत्पादन सॉफ्टवेयर को परीक्षण कोड या गंदा वर्ग इंटरफेस के साथ फूला हुआ होगा जो सार्वजनिक रूप से अपने गंदे लिनन को धोता है। * 8 ')
- सभी के सभी - यह बेहतर है कि निजी कार्यान्वयन के खिलाफ परीक्षण न करें।