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