परिप्रेक्ष्य:
तो चलिए एक कदम पीछे लेते हैं और पूछते हैं कि टीडीडी हमारी मदद करने की कोशिश कर रहा है। TDD यह निर्धारित करने में हमारी मदद करने की कोशिश कर रहा है कि हमारा कोड सही है या नहीं। और सही से, मेरा मतलब है "कोड व्यावसायिक आवश्यकताओं को पूरा करता है?" विक्रय बिंदु यह है कि हम जानते हैं कि भविष्य में परिवर्तनों की आवश्यकता होगी, और हम यह सुनिश्चित करना चाहते हैं कि उन परिवर्तनों को करने के बाद हमारा कोड सही बना रहे।
मैं उस परिप्रेक्ष्य को सामने लाता हूं क्योंकि मुझे लगता है कि विवरणों में खो जाना आसान है और हम जो हासिल करने की कोशिश कर रहे हैं उसकी दृष्टि खो देते हैं।
सिद्धांत - SAP:
जब मैं टीडीडी में विशेषज्ञ नहीं हूं, तो मुझे लगता है कि आप एकल निबंध सिद्धांत (एसएपी) को पढ़ाने की कोशिश कर रहे हैं का हिस्सा याद कर रहे हैं। एसएपी को "एक समय में एक चीज का परीक्षण" के रूप में बहाल किया जा सकता है। लेकिन एसएपीटी के रूप में टीओटीएटी जीभ को आसानी से रोल नहीं करता है।
एक समय में एक चीज का परीक्षण करने का मतलब है कि आप एक मामले पर ध्यान केंद्रित करते हैं; एक मार्ग; एक सीमा स्थिति; एक त्रुटि मामला; एक जो कुछ परीक्षण प्रति। और इसके पीछे का ड्राइविंग आइडिया आपको यह जानने की जरूरत है कि जब टेस्ट केस फेल हो जाता है तो आप क्या कर सकते हैं, इसलिए आप समस्या को और अधिक तेजी से हल कर सकते हैं। यदि आप एक परीक्षण के भीतर कई शर्तों (यानी एक से अधिक चीजों) का परीक्षण करते हैं और परीक्षण विफल हो जाता है, तो आपके हाथों पर बहुत अधिक काम होता है। आपको पहले यह पहचानना होगा कि कौन से कई मामले विफल हुए और फिर यह पता करें कि वह मामला विफल क्यों हुआ ।
यदि आप एक समय में एक चीज का परीक्षण करते हैं, तो आपका खोज क्षेत्र बहुत छोटा है और दोष को अधिक तेज़ी से पहचाना जाता है। ध्यान रखें कि "एक समय में एक चीज का परीक्षण करें" जरूरी नहीं कि आपको एक बार में एक से अधिक प्रक्रिया आउटपुट को देखने से बाहर रखे। उदाहरण के लिए, "ज्ञात अच्छे मार्ग" का परीक्षण करते समय, मैं एक विशिष्ट, परिणामी मूल्य के foo
साथ-साथ दूसरे मूल्य में भी देखने की उम्मीद कर bar
सकता हूं और मैं इसे foo != bar
अपने परीक्षण के भाग के रूप में सत्यापित कर सकता हूं। कुंजी तार्किक रूप से परीक्षण किए जा रहे मामले के आधार पर आउटपुट चेक का समूह है।
सिद्धांत - PMP:
इसी तरह, मुझे लगता है कि आपको निजी पद्धति सिद्धांत (पीएमपी) के बारे में थोड़ा याद आ रहा है। पीएमपी हमें प्रणाली को ब्लैक बॉक्स की तरह व्यवहार करने के लिए प्रोत्साहित करता है। दिए गए इनपुट के लिए, आपको एक दिया हुआ आउटपुट मिलना चाहिए। आपको परवाह नहीं है कि ब्लैक बॉक्स आउटपुट कैसे उत्पन्न करता है। आप केवल इस बात का ध्यान रखते हैं कि आपके आउटपुट आपके इनपुट के साथ संरेखित हों।
PMP आपके कोड के API पहलुओं को देखने के लिए वास्तव में अच्छा परिप्रेक्ष्य है। यह आपको उस चीज की गुंजाइश बनाने में भी मदद कर सकता है जिसे आपको परीक्षण करना है। अपने इंटरफ़ेस बिंदुओं को पहचानें और सत्यापित करें कि वे अपने अनुबंधों की शर्तों को पूरा करते हैं। आपको इस बात की परवाह करने की ज़रूरत नहीं है कि पीछे के इंटरफ़ेस (उर्फ निजी) तरीके अपना काम कैसे करते हैं। आपको बस यह सत्यापित करने की आवश्यकता है कि उन्होंने वही किया जो वे करने वाले थे।
लागू टीडीडी ( आपके लिए )
तो आपकी स्थिति एक साधारण अनुप्रयोग से परे एक शिकन प्रस्तुत करती है। आपके ऐप के तरीके स्टेटफुल हैं, इसलिए उनका आउटपुट न केवल इनपुट पर बल्कि पहले से जो कुछ किया गया है, उस पर निर्भर है। मुझे यकीन है कि मुझे <insert some lecture>
यहाँ भयानक और ब्ला ब्ला ब्ला के बारे में होना चाहिए , लेकिन यह वास्तव में आपकी समस्या को हल करने में मदद नहीं करता है।
मैं आपको मानने जा रहा हूं कि आपके पास किसी प्रकार की राज्य आरेख तालिका है जो विभिन्न संभावित राज्यों को दिखाती है और संक्रमण को ट्रिगर करने के लिए क्या करने की आवश्यकता है। यदि आप नहीं करते हैं, तो आपको इसकी आवश्यकता होगी क्योंकि यह इस प्रणाली के लिए व्यावसायिक आवश्यकताओं को व्यक्त करने में मदद करेगा।
टेस्ट: सबसे पहले, आप परीक्षण के एक सेट के साथ समाप्त करने जा रहे हैं जो राज्य परिवर्तन को लागू करते हैं। आदर्श रूप से, आपके पास ऐसे परीक्षण होंगे जो राज्य परिवर्तनों की पूरी श्रृंखला का उपयोग करते हैं जो हो सकते हैं लेकिन मैं कुछ परिदृश्य देख सकता हूं जहां आपको उस पूर्ण सीमा तक जाने की आवश्यकता नहीं हो सकती है।
अगला, आपको डेटा प्रोसेसिंग को मान्य करने के लिए परीक्षण बनाने की आवश्यकता है। जब आप डेटा प्रोसेसिंग परीक्षण बनाते हैं, तो उन कुछ राज्य परीक्षणों का पुन: उपयोग किया जाएगा। उदाहरण के लिए, मान लीजिए कि आपके पास एक ऐसी विधि है Foo()
जिसके पास Init
और State1
राज्यों के आधार पर अलग-अलग आउटपुट हैं। ChangeFooToState1
जब आप " Foo()
इन State1
" है तो आउटपुट का परीक्षण करने के लिए आप अपने परीक्षण का उपयोग सेटअप चरण के रूप में करना चाहेंगे ।
उस दृष्टिकोण के पीछे कुछ निहितार्थ हैं जिनका मैं उल्लेख करना चाहता हूं। Spoiler, यह वह जगह है जहाँ मैं शुद्धतावादियों को संक्रमित करता हूँ
सबसे पहले, आपको यह स्वीकार करना होगा कि आप एक स्थिति में एक परीक्षण के रूप में कुछ का उपयोग कर रहे हैं और दूसरी स्थिति में एक सेटअप। एक ओर, यह एसएपी का सीधा उल्लंघन प्रतीत होता है। लेकिन अगर आप तार्किक ChangeFooToState1
रूप से दो उद्देश्यों के रूप में फ्रेम करते हैं तो आप अभी भी उस भावना को पूरा कर रहे हैं जो एसएपी हमें सिखा रहा है। जब आपको यह सुनिश्चित करने की आवश्यकता होती है कि Foo()
परिवर्तन अवस्थाएँ हैं, तो आप ChangeFooToState1
परीक्षण के रूप में उपयोग करते हैं । और जब "तब Foo()
जब State1
आप ChangeFooToState1
सेटअप के रूप में उपयोग कर रहे हैं तब आउटपुट को मान्य करने की आवश्यकता होती है ।
दूसरा आइटम यह है कि व्यावहारिक दृष्टिकोण से, आप अपने सिस्टम के लिए पूरी तरह से यादृच्छिक इकाई परीक्षण नहीं चाहते हैं। आपको आउटपुट सत्यापन परीक्षण चलाने से पहले सभी राज्य परिवर्तन परीक्षण चलाने चाहिए। SAP उस आदेश के पीछे मार्गदर्शक सिद्धांत की तरह है। यह स्पष्ट करने के लिए कि आपको परीक्षण के रूप में विफल होने पर सेटअप के रूप में कुछ का उपयोग नहीं किया जा सकता है।
इसे एक साथ रखना:
अपने राज्य आरेख का उपयोग करके, आप संक्रमणों को कवर करने के लिए परीक्षण उत्पन्न करेंगे। फिर से, अपने आरेख का उपयोग करते हुए, आप राज्य द्वारा संचालित सभी इनपुट / आउटपुट डेटा प्रोसेसिंग मामलों को कवर करने के लिए परीक्षण उत्पन्न करते हैं।
यदि आप उस दृष्टिकोण का पालन करते हैं, तो bloated, complicated, long, and difficult to write
परीक्षणों को प्रबंधित करने के लिए थोड़ा आसान होना चाहिए। सामान्य तौर पर, उन्हें छोटा होना चाहिए और उन्हें अधिक संक्षिप्त (यानी कम जटिल) होना चाहिए। आपको ध्यान देना चाहिए कि परीक्षण अधिक डिकूप्ड या मॉड्यूलर भी हैं।
अब, मैं यह नहीं कह रहा हूं कि प्रक्रिया पूरी तरह से दर्द मुक्त होगी क्योंकि अच्छे परीक्षण लिखने से कुछ प्रयास होता है। और उनमें से कुछ अभी भी मुश्किल होंगे क्योंकि आप अपने कुछ मामलों में एक दूसरे पैरामीटर (राज्य) की मैपिंग कर रहे हैं। और एक तरफ के रूप में, यह थोड़ा और स्पष्ट होना चाहिए कि क्यों एक स्टेटलेस सिस्टम के लिए परीक्षण बनाने में आसान है। लेकिन अगर आप अपने आवेदन के लिए इस दृष्टिकोण को अनुकूलित करते हैं, तो आपको यह पता लगाना चाहिए कि आप साबित कर सकते हैं कि आपका आवेदन सही तरीके से काम कर रहा है।