जहां तक मैं इसे समझता हूं, ज्यादातर लोग इस बात से सहमत दिखते हैं कि निजी तरीकों का सीधे परीक्षण नहीं किया जाना चाहिए, बल्कि जो भी सार्वजनिक तरीके उन्हें कहते हैं, उनके माध्यम से। मैं उनकी बात देख सकता हूं, लेकिन मुझे इससे कुछ समस्या है जब मैं "टीडीडी के तीन कानूनों" का पालन करने की कोशिश करता हूं, और "रेड - ग्रीन - रिफ्लेक्टर" चक्र का उपयोग करता हूं। मुझे लगता है कि यह एक उदाहरण द्वारा सबसे अच्छा समझाया गया है:
अभी, मुझे एक प्रोग्राम की आवश्यकता है जो एक फ़ाइल (टैब-अलग डेटा युक्त) पढ़ सकता है और सभी स्तंभों को फ़िल्टर कर सकता है जिनमें गैर-संख्यात्मक डेटा होते हैं। मुझे लगता है कि ऐसा करने के लिए शायद पहले से ही कुछ सरल उपकरण उपलब्ध हैं, लेकिन मैंने इसे स्वयं खरोंच से लागू करने का फैसला किया, क्योंकि मुझे लगा कि यह मेरे लिए एक अच्छा और साफ प्रोजेक्ट हो सकता है क्योंकि मुझे टीडीडी के साथ कुछ अभ्यास करना होगा।
तो, पहले, मैंने "लाल टोपी लगाई", यानी, मुझे एक परीक्षा की आवश्यकता है जो विफल हो जाती है। मुझे लगा, मुझे एक विधि की आवश्यकता होगी जो सभी गैर-संख्यात्मक क्षेत्रों को एक पंक्ति में ढूंढती है। इसलिए मैं एक सरल परीक्षण लिखता हूं, निश्चित रूप से यह तुरंत संकलन करने में विफल रहता है, इसलिए मैं खुद ही फ़ंक्शन लिखना शुरू कर देता हूं, और कुछ चक्रों के बाद आगे और पीछे (लाल / हरे) मेरे पास एक कार्यशील फ़ंक्शन और एक पूर्ण परीक्षण है।
इसके बाद, मैं एक फ़ंक्शन, "collectNonNumericColumns" को जारी रखता हूं, जो एक बार में फ़ाइल, एक पंक्ति को पढ़ता है, और सभी स्तंभों को इकट्ठा करने के लिए प्रत्येक पंक्ति पर मेरे "findNonNumericFields" -function को कॉल करता है जो अंततः हटाए जाने चाहिए। लाल-हरे-चक्र के एक जोड़े, और मैं कर रहा हूं, फिर से काम कर रहा है और एक पूर्ण परीक्षण।
अब, मुझे लगता है कि मुझे रिफ्लेक्टर चाहिए। चूँकि मेरी विधि "findNonNumericFields" को केवल इसलिए डिज़ाइन किया गया था क्योंकि मुझे लगा कि "इकट्ठेNumericColumns" को लागू करते समय मुझे इसकी आवश्यकता होगी, तो मुझे लगता है कि "findNonNumericFields" को निजी बनाना उचित होगा। हालाँकि, यह मेरे पहले परीक्षणों को तोड़ देगा, क्योंकि अब वे उस पद्धति तक नहीं पहुँच पाएंगे जिसका वे परीक्षण कर रहे थे।
इसलिए, मैं एक निजी विधियों और परीक्षण के एक सूट के साथ अंत करता हूं जो इसे परीक्षण करता है। चूंकि बहुत से लोग सलाह देते हैं कि निजी तरीकों का परीक्षण नहीं किया जाना चाहिए, ऐसा लगता है कि मैंने खुद को यहां एक कोने में चित्रित किया है। लेकिन वास्तव में मैं कहाँ असफल रहा?
मैं इकट्ठा करता हूं कि मैं एक उच्च स्तर पर शुरू हो सकता था, एक परीक्षण लिख रहा था जो परीक्षण करता है कि आखिरकार मेरी सार्वजनिक विधि क्या होगी (यानी, findAndFilterOutAllNonNumericalColumns), लेकिन यह कुछ हद तक TDD के पूरे बिंदु पर काउंटर लगता है (कम से कम अंकल बॉब के अनुसार) : कि आपको परीक्षण परीक्षण और उत्पादन कोड के बीच लगातार स्विच करना चाहिए, और यह कि किसी भी समय, आपके सभी परीक्षणों ने अंतिम मिनट के भीतर काम किया। क्योंकि अगर मैं किसी सार्वजनिक पद्धति के लिए परीक्षण लिखकर शुरू करता हूं, तो निजी तरीकों में काम करने के लिए सभी विवरण प्राप्त करने से पहले कई मिनट (या घंटे, या बहुत जटिल मामलों में दिन) होंगे ताकि परीक्षण का परीक्षण सार्वजनिक हो जाए विधि गुजरती है।
इसलिए क्या करना है? क्या TDD (तीव्र लाल-हरे-परावर्तक चक्र के साथ) बस निजी विधियों के अनुकूल नहीं है? या मेरे डिजाइन में कोई खराबी है?
private
यह करने के लिए समझ में आता है।