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