क्या यूनिट टेस्ट के बजाय स्वीकृति और एकीकरण परीक्षणों का उपयोग करना पर्याप्त है?


62

इस प्रश्न का संक्षिप्त परिचय। मैंने अब एक वर्ष से अधिक समय तक टीडीडी और हाल ही में बीडीडी का उपयोग किया है। मैं अपने परीक्षणों को अधिक कुशलता से लिखने के लिए मॉकिंग जैसी तकनीकों का उपयोग करता हूं। हाल ही में मैंने अपने लिए थोड़ा पैसा प्रबंधन कार्यक्रम लिखने के लिए एक व्यक्तिगत परियोजना शुरू की है। चूंकि मेरे पास कोई विरासत कोड नहीं था, यह टीडीडी के साथ शुरू करने के लिए एकदम सही परियोजना थी। दुर्भाग्य से मुझे टीडीडी के आनंद का इतना अनुभव नहीं हुआ। इसने मेरी मस्ती को इतना बिगाड़ दिया कि मैंने प्रोजेक्ट तक छोड़ दिया।

क्या समस्या थी? खैर, मैंने परीक्षण / आवश्यकताओं को कार्यक्रम के डिजाइन को विकसित करने देने के लिए टीडीडी जैसे दृष्टिकोण का उपयोग किया है। समस्या यह थी कि विकास के समय का लगभग आधा हिस्सा लेखन / रिफलेक्टर परीक्षणों के लिए था। इसलिए अंत में मैं और अधिक सुविधाओं को लागू नहीं करना चाहता था क्योंकि मुझे कई परीक्षण करने के लिए रिफैक्ट करने और लिखने की आवश्यकता होगी।

काम में मेरे पास बहुत सारी विरासत कोड है। यहां मैं अधिक से अधिक एकीकरण और स्वीकृति परीक्षण और कम इकाई परीक्षण लिखता हूं। यह एक बुरा दृष्टिकोण नहीं लगता क्योंकि बग को ज्यादातर स्वीकृति और एकीकरण परीक्षणों द्वारा पता लगाया जाता है।

मेरा विचार था, कि मैं इकाई परीक्षणों की तुलना में अंत में अधिक एकीकरण और स्वीकृति परीक्षण लिख सकता हूं। जैसे मैंने बग का पता लगाने के लिए कहा कि यूनिट परीक्षण एकीकरण / स्वीकृति परीक्षणों से बेहतर नहीं हैं। यूनिट टेस्ट डिजाइन के लिए भी अच्छे हैं। चूंकि मैं उनमें से बहुत कुछ लिखता था इसलिए मेरी कक्षाएं हमेशा अच्छे परीक्षण के लिए तैयार की जाती हैं। इसके अतिरिक्त, परीक्षण / आवश्यकताओं को निर्देशित करने के लिए दृष्टिकोण डिजाइन को बेहतर डिजाइन के लिए अधिकांश मामलों में ले जाता है। यूनिट परीक्षणों का अंतिम लाभ यह है कि वे तेज होते हैं। मैंने यह जानने के लिए पर्याप्त एकीकरण परीक्षण लिखे हैं, कि वे इकाई परीक्षणों के समान लगभग तेज़ हो सकते हैं।

जब मैं वेब के माध्यम से देख रहा था तब मुझे पता चला कि यहाँ और वहाँ उल्लिखित विचारों के समान हैं । इस विचार के बारे में आप क्या सोचते हैं?

संपादित करें

सवालों के जवाब में एक उदाहरण जहां डिजाइन अच्छा था, लेकिन मुझे अगली आवश्यकता के लिए एक बड़ी रिफैक्टिंग की आवश्यकता थी:

पहले कुछ आदेशों को निष्पादित करने के लिए कुछ आवश्यकताएं थीं। मैंने एक विस्तार योग्य कमांड पार्सर लिखा - जिसने कुछ प्रकार के कमांड प्रॉम्प्ट से कमांडों को पार्स किया और मॉडल पर सही एक कहा। परिणाम को एक दृश्य मॉडल वर्ग में दर्शाया गया था: पहला डिजाइन

यहां कुछ भी गलत नहीं था। सभी वर्ग एक-दूसरे से स्वतंत्र थे और मैं आसानी से नए कमांड जोड़ सकता था, नए डेटा दिखा सकता था।

अगली आवश्यकता यह थी, कि प्रत्येक कमांड का अपना स्वयं का प्रतिनिधित्व होना चाहिए - कमांड के परिणाम का किसी प्रकार का पूर्वावलोकन। मैंने नई आवश्यकता के लिए एक बेहतर डिज़ाइन प्राप्त करने के लिए कार्यक्रम को नया रूप दिया: दूसरा डिजाइन

यह अच्छा भी था क्योंकि अब हर कमांड का अपना एक अलग मॉडल है और इसलिए इसका अपना पूर्वावलोकन है।

बात यह है, कि कमांड पार्सर को कमांड के टोकन आधारित पार्सिंग का उपयोग करने के लिए बदल दिया गया था और कमांड को निष्पादित करने की अपनी क्षमता से छीन लिया गया था। प्रत्येक कमांड को अपना स्वयं का दृश्य मॉडल मिला और डेटा व्यू मॉडल केवल वर्तमान कमांड व्यू मॉडल को जानता है जो उस डेटा को जानता है जिसे दिखाया जाना है।

मैं इस बिंदु पर जानना चाहता था, अगर नए डिजाइन ने किसी मौजूदा आवश्यकता को नहीं तोड़ा है। मुझे अपनी किसी भी स्वीकृति परीक्षा को बदलना नहीं था। मुझे लगभग हर यूनिट परीक्षण को फिर से भरना या हटाना पड़ा, जो काम का एक बड़ा ढेर था।

मैं यहां जो दिखाना चाहता था वह एक सामान्य स्थिति है जो विकास के दौरान अक्सर हुई। पुराने या नए डिजाइनों के साथ कोई समस्या नहीं थी, वे आवश्यकताओं के साथ स्वाभाविक रूप से बदल गए - मैंने इसे कैसे समझा, यह टीडीडी का एक फायदा है, कि डिजाइन विकसित होता है।

निष्कर्ष

सभी उत्तर और चर्चा के लिए धन्यवाद। इस चर्चा के सारांश में मैंने एक दृष्टिकोण के बारे में सोचा है जिसे मैं अपनी अगली परियोजना के साथ परीक्षण करूंगा।

  • सबसे पहले मैं कुछ भी लागू करने से पहले सभी परीक्षण लिखता हूं जैसे मैंने हमेशा किया।
  • आवश्यकताओं के लिए मैं पहले कुछ स्वीकृति परीक्षणों को लिखता हूं जो पूरे कार्यक्रम का परीक्षण करता है। फिर मैं उन घटकों के लिए कुछ एकीकरण परीक्षण लिखता हूं जहां मुझे आवश्यकता को लागू करने की आवश्यकता होती है। यदि कोई ऐसा घटक है जो इस आवश्यकता को कार्यान्वित करने के लिए किसी अन्य घटक के साथ मिलकर काम करता है तो मैं कुछ एकीकरण परीक्षण भी लिखूँगा जहाँ दोनों घटकों का एक साथ परीक्षण किया जाता है। पिछले नहीं बल्कि कम से कम अगर मुझे एक उच्च क्रमचय के साथ एक एल्गोरिथ्म या किसी अन्य वर्ग को लिखना है - उदाहरण के लिए एक धारावाहिक - मैं इस विशेष कक्षाओं के लिए इकाई परीक्षण लिखूंगा। अन्य सभी कक्षाओं का परीक्षण नहीं किया जाता है, लेकिन किसी भी इकाई परीक्षण।
  • बग के लिए प्रक्रिया को सरल बनाया जा सकता है। आम तौर पर एक बग एक या दो घटकों के कारण होता है। इस मामले में मैं उन घटकों के लिए एक एकीकरण परीक्षण लिखूंगा जो बग का परीक्षण करते हैं। यदि यह एक एल्गोरिथ्म से संबंधित है तो मैं केवल एक इकाई परीक्षण लिखूंगा। यदि उस घटक का पता लगाना आसान नहीं है जहां बग होता है तो मैं बग का पता लगाने के लिए स्वीकृति परीक्षण लिखूंगा - यह एक अपवाद होना चाहिए।


ये प्रश्न इस बात की अधिक समस्या का समाधान करते प्रतीत होते हैं कि सभी परीक्षण क्यों लिखते हैं। मैं चर्चा करना चाहता हूं कि क्या यूनिट परीक्षणों के बजाय कार्यात्मक परीक्षण लिखना बेहतर दृष्टिकोण हो सकता है।
यज्ञद्रसील

मेरे पढ़ने के अनुसार, डुप्लिकेट प्रश्न के उत्तर मुख्य रूप से तब होते हैं जब गैर- परीक्षण के लिए अधिक समझ होती है
gnat

वह पहला लिंक स्वयं एक डुप्लिकेट है। आप का मतलब है: प्रोग्रामर
रॉबी डी

रोबी डी के लिंक से जवाब और भी अधिक है कि आखिर क्यों परीक्षण किया जाए।
यज्ञद्रसिल

जवाबों:


37

यह संतरे और सेब की तुलना कर रहा है।

एकीकरण परीक्षण, स्वीकृति परीक्षण, इकाई परीक्षण, व्यवहार परीक्षण - वे सभी परीक्षण हैं और वे सभी आपके कोड को बेहतर बनाने में आपकी मदद करेंगे लेकिन वे भी काफी अलग हैं।

मैं अपनी राय में विभिन्न परीक्षणों में से प्रत्येक पर जा रहा हूं और उम्मीद करता हूं कि आपको उन सभी के मिश्रण की आवश्यकता क्यों है:

एकीकरण परीक्षण:

बस, परीक्षण करें कि आपके सिस्टम के विभिन्न घटक भागों को सही ढंग से एकीकृत किया गया है - उदाहरण के लिए - शायद आप एक वेब सेवा अनुरोध का अनुकरण करते हैं और जांचते हैं कि परिणाम वापस आता है। मैं आम तौर पर वास्तविक (ईश) स्थैतिक डेटा का उपयोग करेगा और यह सुनिश्चित करने के लिए कि यह लगातार सत्यापित किया जा सकता है निर्भरता का मज़ाक उड़ाया।

स्वीकृति परीक्षण:

एक स्वीकृति परीक्षण को सीधे व्यावसायिक उपयोग के मामले में सहसंबंधित होना चाहिए। यह बहुत बड़ा हो सकता है ("ट्रेडों को सही तरीके से प्रस्तुत किया जाता है") या छोटे ("फ़िल्टर सफलतापूर्वक एक सूची को फ़िल्टर करता है") - इससे कोई फर्क नहीं पड़ता; क्या मायने रखता है कि यह एक विशिष्ट उपयोगकर्ता की आवश्यकता के लिए स्पष्ट रूप से बंधा होना चाहिए। मुझे परीक्षण-संचालित विकास के लिए इन पर ध्यान केंद्रित करना पसंद है क्योंकि इसका मतलब है कि हमारे पास सत्यापन के लिए देव और क्यूए के लिए उपयोगकर्ता कहानियों के परीक्षण का एक अच्छा संदर्भ मैनुअल है।

इकाई परीक्षण:

कार्यक्षमता की छोटी असतत इकाइयों के लिए जो स्वयं द्वारा एक व्यक्तिगत उपयोगकर्ता कहानी बना सकते हैं या नहीं बना सकते हैं - उदाहरण के लिए, एक उपयोगकर्ता कहानी जो कहती है कि हम सभी ग्राहकों को पुनः प्राप्त करते हैं जब हम एक विशिष्ट वेब पेज को स्वीकार करते हैं तो एक स्वीकृति परीक्षा हो सकती है (वेब ​​को मारना अनुकरण करें पेज और प्रतिक्रिया की जांच) लेकिन इसमें कई यूनिट परीक्षण भी हो सकते हैं (सत्यापित करें कि सुरक्षा अनुमतियों की जांच की जाती है, सत्यापित करें कि डेटाबेस कनेक्शन क्वेरीज़ सही ढंग से, सत्यापित करें कि परिणामों की संख्या को सीमित करने वाले किसी भी कोड को सही तरीके से निष्पादित किया गया है) - ये सभी "यूनिट टेस्ट" हैं यह एक पूर्ण स्वीकृति परीक्षण नहीं है।

व्यवहार परीक्षण:

परिभाषित करें कि एक विशिष्ट इनपुट के मामले में प्रवाह क्या होना चाहिए। उदाहरण के लिए, "जब कनेक्शन स्थापित नहीं किया जा सकता है, तो सत्यापित करें कि सिस्टम कनेक्शन को वापस करता है।" फिर से, यह पूर्ण स्वीकृति परीक्षण होने की संभावना नहीं है लेकिन यह अभी भी आपको कुछ उपयोगी सत्यापित करने की अनुमति देता है।

लेखन परीक्षण के अनुभव के माध्यम से ये सब मेरी राय में हैं; मुझे पाठ्यपुस्तक के दृष्टिकोण पर ध्यान केंद्रित करना पसंद नहीं है - बल्कि, अपने परीक्षणों के मूल्य पर ध्यान दें।


आपकी परिभाषा में, मुझे लगता है कि मेरा मतलब है कि इकाई परीक्षण की तुलना में अधिक व्यवहार परीक्षण (?) लिखना है। मेरे लिए इकाई परीक्षण एक परीक्षण है जो सभी निर्भरता के साथ एकल वर्ग का परीक्षण करता है। ऐसे मामले हैं जहां इकाई परीक्षण सबसे उपयोगी हैं। उदाहरण के लिए, जब मैं एक जटिल एल्गोरिथ्म लिखता हूं। तब मेरे पास एल्गोरिथम के अपेक्षित आउटपुट के साथ कई उदाहरण हैं। मैं इसे यूनिट स्तर पर परीक्षण करना चाहता हूं क्योंकि यह वास्तव में व्यवहार परीक्षण से तेज है। मैं इकाई स्तर पर एक वर्ग के परीक्षण के मूल्य को नहीं देखता हूं जिसमें केवल कक्षा के माध्यम से एक हाथ भरा हुआ पथ होता है जिसे आसानी से एक व्यवहार परीक्षण द्वारा परीक्षण किया जा सकता है।
यज्ञद्रसील

14
मुझे व्यक्तिगत रूप से लगता है कि स्वीकृति परीक्षण सबसे महत्वपूर्ण हैं, संचार, विश्वसनीयता और त्रुटि मामलों और इकाई परीक्षण जैसी चीजों का परीक्षण करते समय व्यवहार परीक्षण महत्वपूर्ण होते हैं जब छोटे जटिल विशेषताओं का परीक्षण करते हैं (एल्गोरिदम इस का एक अच्छा उदाहरण होगा)
माइकल

मैं आपकी शब्दावली के साथ इतना दृढ़ नहीं हूं। हम एक प्रोग्रामिंग सूट प्रोग्राम करते हैं। वहां मैं आलेखीय संपादक के लिए जिम्मेदार हूं। मेरे परीक्षण में सूट के बाकी हिस्सों से और नकली UI के साथ नकली सेवाओं के साथ संपादक का परीक्षण है। वह किस तरह की परीक्षा होगी?
यज्ञद्रसील

1
निर्भर करता है कि आप क्या परीक्षण कर रहे हैं - क्या आप व्यावसायिक सुविधाओं (स्वीकृति परीक्षण) का परीक्षण कर रहे हैं? क्या आप एकीकरण (एकीकरण परीक्षण) का परीक्षण कर रहे हैं? क्या आप परीक्षण कर रहे हैं कि क्या होता है जब आप एक बटन (व्यवहार परीक्षण) पर क्लिक करते हैं? क्या आप एल्गोरिदम (इकाई परीक्षण) का परीक्षण कर रहे हैं?
माइकल

4
"मुझे पाठ्यपुस्तक के दृष्टिकोण पर ध्यान केंद्रित करना पसंद नहीं है - बल्कि, अपने परीक्षणों के मूल्य पर ध्यान केंद्रित करें" ओह, तो सच है! पहला सवाल हमेशा पूछना है कि "मुझे ऐसा करने से क्या समस्या हल होती है?"। और विभिन्न प्रोजेक्ट को हल करने के लिए अलग समस्या हो सकती है!
लॉरेंट बॉरगुल्ट-रॉय

40

TL; DR: जब तक यह आपकी आवश्यकताओं को पूरा करता है, हाँ।

मैं कई सालों से एक्सेप्टेंस टेस्ट ड्रिवेन डेवलपमेंट (ATDD) कर रहा हूं। यह बहुत सफल हो सकता है। कुछ बातों की जानकारी होनी चाहिए।

  • यूनिट परीक्षण वास्तव में आईओसी को लागू करने में मदद करते हैं। यूनिट परीक्षणों के बिना onus डेवलपर्स पर है यह सुनिश्चित करने के लिए कि वे अच्छी तरह से लिखित कोड की आवश्यकताओं को पूरा करते हैं (अब तक यूनिट टेस्ट ड्राइव लिखित कोड)
  • यदि आप वास्तव में संसाधनों का उपयोग कर रहे हैं जो आमतौर पर नकली हैं, तो वे धीमी हो सकती हैं और झूठी विफलताएं हो सकती हैं।
  • परीक्षण विशिष्ट समस्या को इंगित नहीं करता है क्योंकि इकाई परीक्षण होगा। परीक्षण विफलताओं को ठीक करने के लिए आपको अधिक जांच करने की आवश्यकता है।

अब लाभ

  • बहुत बेहतर परीक्षण कवरेज, एकीकरण अंक शामिल हैं।
  • सिस्टम को सुनिश्चित करता है क्योंकि संपूर्ण स्वीकृति मानदंडों को पूरा करता है, जो सॉफ्टवेयर विकास का संपूर्ण बिंदु है।
  • बड़े रिफैक्टर्स को बहुत आसान, तेज और सस्ता बनाता है।

हमेशा की तरह यह आपके लिए है कि विश्लेषण करें और यह पता लगाएं कि क्या यह अभ्यास आपकी स्थिति के लिए उपयुक्त है। कई लोगों के विपरीत मुझे नहीं लगता कि एक आदर्श सही उत्तर है। यह आपकी आवश्यकताओं और आवश्यकताओं पर निर्भर करेगा।


8
बहुत बढ़िया बिंदु। यह बहुत आसान है कि परीक्षण के बारे में थोड़ी सी जगह कैडेट बन जाए और सैकड़ों मामलों को संतोष की गर्म चमक प्राप्त करने के लिए लिखें जब यह उड़ने वाले रंगों के साथ "गुजरता" है। सीधे शब्दों में कहें: यदि आपका सॉफ़्टवेयर USER के दृष्टिकोण से ऐसा करने की आवश्यकता नहीं है, तो आप पहले और सबसे महत्वपूर्ण परीक्षण में विफल रहे हैं।
रॉबी डे

विशिष्ट समस्या को इंगित करने के लिए अच्छा बिंदु। अगर मुझे एक बड़ी आवश्यकता है तो मैं स्वीकृति परीक्षण लिखता हूं जो पूरी प्रणाली का परीक्षण करता है और परीक्षण लिखने से जो आवश्यकता को प्राप्त करने के लिए सिस्टम के कुछ घटकों के उप कार्यों का परीक्षण करता है। इसके साथ मैं ज्यादातर मामलों में घटक को इंगित कर सकता हूं, जहां दोष निहित है।
यज्ञद्रसील

2
"यूनिट परीक्षण IOC को लागू करने में मदद करते हैं?"? मुझे यकीन है कि आप IoC के बजाय वहां DI का मतलब है, लेकिन वैसे भी, कोई DI के उपयोग को लागू क्यों करना चाहेगा ? व्यक्तिगत रूप से, मुझे लगता है कि व्यवहार में DI गैर-ऑब्जेक्ट्स (प्रक्रियात्मक-शैली प्रोग्रामिंग) की ओर जाता है।
रोजेरियो

क्या आप अपना इनपुट (IMO बेस्ट) BOTH इंटीग्रेशन और यूनिट टेस्टिंग बनाम केवल एकीकरण परीक्षण करने के तर्क के आधार पर दे सकते हैं? यहां आपका जवाब अच्छा है, लेकिन इन चीजों को परस्पर-अनन्य रूप में फ्रेम करना प्रतीत होता है, जो मुझे नहीं लगता कि वे हैं।
starmandeluxe

@starmandeluxe वे वास्तव में परस्पर अनन्य नहीं हैं। बल्कि यह उस मूल्य का प्रश्न है जिसे आप परीक्षण से प्राप्त करना चाहते हैं। मैं इकाई परीक्षण कहीं भी करूँगा जहाँ मूल्य इकाई परीक्षण लिखने के विकास / समर्थन लागत से अधिक हो। पूर्व। मैं निश्चित रूप से एक वित्तीय आवेदन में चक्रवृद्धि ब्याज समारोह का परीक्षण करूंगा।
आहारबुद्धि

18

खैर, मैंने परीक्षण / आवश्यकताओं को कार्यक्रम के डिजाइन को विकसित करने देने के लिए टीडीडी जैसे दृष्टिकोण का उपयोग किया है। समस्या यह थी कि विकास के समय का लगभग आधा हिस्सा लेखन / रिफलेक्टर परीक्षणों के लिए था

यूनिट परीक्षण सबसे अच्छा काम करते हैं जब उनके द्वारा उपयोग किए जाने वाले घटकों का सार्वजनिक इंटरफ़ेस बहुत बार नहीं बदलता है। इसका मतलब है, जब घटक पहले से ही अच्छी तरह से डिज़ाइन किए गए हैं (उदाहरण के लिए, एसओएलआईडी सिद्धांतों का पालन)।

इसलिए एक अच्छी डिज़ाइन को एक घटक में बहुत सारे यूनिट परीक्षणों को "फेंकने" से "विकसित" करने पर विश्वास करना एक गिरावट है। टीडीडी अच्छे डिजाइन के लिए कोई "शिक्षक" नहीं है, यह सत्यापित करने के लिए केवल थोड़ा सा मदद कर सकता है कि डिजाइन के कुछ पहलू अच्छे हैं (विशेषकर विकलांगता)।

जब आपकी आवश्यकताएं बदल जाती हैं, और आपको एक घटक के आंतरिक को बदलना पड़ता है, और यह आपके यूनिट परीक्षणों के 90% को तोड़ देगा, इसलिए आपको उन्हें बहुत बार रिफ्लेक्टर करना होगा, तब डिज़ाइन संभवतः सबसे अच्छा नहीं था।

इसलिए मेरी सलाह है: आपके द्वारा बनाए गए घटकों के डिजाइन के बारे में सोचें, और आप खुले / बंद सिद्धांत का पालन करके उन्हें और अधिक कैसे बना सकते हैं। उत्तरार्द्ध का विचार यह सुनिश्चित करना है कि आपके घटकों की कार्यक्षमता बाद में उन्हें बदले बिना विस्तारित की जा सकती है (और इस प्रकार आपके यूनिट परीक्षणों द्वारा उपयोग किए गए घटक के एपीआई को नहीं तोड़ना)। इस तरह के घटक यूनिट परीक्षण परीक्षणों द्वारा कवर किए जा सकते हैं (और होना चाहिए), और अनुभव उतना दर्दनाक नहीं होना चाहिए जितना आपने इसे वर्णित किया है।

जब आप तुरंत इस तरह के डिजाइन के साथ नहीं आ सकते हैं, तो स्वीकृति और एकीकरण परीक्षण वास्तव में बेहतर शुरुआत हो सकते हैं।

संपादित करें: कभी-कभी आपके घटकों का डिज़ाइन ठीक हो सकता है, लेकिन आपकी इकाई परीक्षणों का डिज़ाइन मुद्दों का कारण बन सकता है । सरल उदाहरण: आप दसवीं कक्षा के "MyMethod" विधि का परीक्षण और लिखना चाहते हैं

    var x= new X();
    Assert.AreEqual("expected value 1" x.MyMethod("value 1"));
    Assert.AreEqual("expected value 2" x.MyMethod("value 2"));
    // ...
    Assert.AreEqual("expected value 500" x.MyMethod("value 500"));

(मानों का अर्थ किसी प्रकार का है)।

इसके अलावा, मान लें कि उत्पादन कोड में सिर्फ एक कॉल है X.MyMethod। अब, एक नई आवश्यकता के लिए, विधि "MyMethod" को एक अतिरिक्त पैरामीटर की आवश्यकता होती है (उदाहरण के लिए, कुछ ऐसा context), जिसे छोड़ा नहीं जा सकता है। यूनिट परीक्षणों के बिना, किसी को केवल एक ही स्थान पर कॉलिंग कोड को रिफलेक्टर करना होगा। यूनिट परीक्षणों के साथ, किसी को 500 स्थानों को रिफलेक्टर करना होगा।

लेकिन यहाँ कारण इकाई परीक्षण नहीं है, यह केवल तथ्य यह है कि "X.MyMethod" के लिए एक ही कॉल बार-बार दोहराया जाता है, "डोंट रिपिट योरसेल्फ (DRY) सिद्धांत का सख्ती से पालन नहीं कर रहा है। इसलिए समाधान यहां परीक्षण डेटा और संबंधित अपेक्षित मानों को एक सूची में रखना और कॉल को "MyMethod" को लूप में चलाना है (या, यदि परीक्षण उपकरण तथाकथित "डेटा ड्राइव परीक्षण" का समर्थन करता है, तो उस सुविधा का उपयोग करने के लिए)। इकाई के परीक्षणों में परिवर्तन के लिए स्थानों की संख्या जब विधि हस्ताक्षर 1 में बदल जाती है (500 के विपरीत)।

आपके वास्तविक दुनिया के मामले में, स्थिति अधिक जटिल हो सकती है, लेकिन मुझे आशा है कि आपको यह विचार मिलेगा - जब आपकी इकाई परीक्षण एक घटक एपीआई का उपयोग करती है, जिसके लिए आप नहीं जानते कि क्या यह परिवर्तन के अधीन हो सकता है, तो सुनिश्चित करें कि आप संख्या कम कर दें उस API के लिए न्यूनतम कॉल करें।


"इसका मतलब यह है, जब घटकों को पहले से ही अच्छी तरह से तैयार कर रहे हैं।": मैं आपसे सहमत हूँ, लेकिन कैसे घटकों को पहले से ही अगर आप कोड लिखने से पहले परीक्षण लिखने तैयार किया जा सकता है, और कोड है डिजाइन? कम से कम इस तरह से मैंने टीडीडी को समझा है।
जियोर्जियो

2
@ जियोर्जियो: वास्तव में, यह वास्तव में कोई फर्क नहीं पड़ता कि आप पहले या बाद में परीक्षण लिखते हैं। डिजाइन का मतलब घटक की जिम्मेदारी के बारे में, सार्वजनिक इंटरफ़ेस के बारे में, निर्भरता (प्रत्यक्ष या इंजेक्शन) के बारे में, रन टाइम या संकलन समय व्यवहार के बारे में, नाम के बारे में, डेटा प्रवाह, नियंत्रण प्रवाह, परतों आदि के बारे में निर्णय लेने से है। डिजाइन का अर्थ समय में नवीनतम संभावित बिंदु के लिए कुछ निर्णयों को स्थगित करना भी है। यदि आपका डिज़ाइन ठीक था, तो यूनिट परीक्षण आपको अप्रत्यक्ष रूप से दिखा सकता है: यदि आप आवश्यकताओं को बदलने के बाद उनमें से बहुत को रिफैक्ट करते हैं, तो यह शायद नहीं था।
डॉक्टर ब्राउन

@ जियोर्जियो: एक उदाहरण स्पष्ट हो सकता है: कहते हैं कि आपके पास एक घटक "मायमेथोड" और 2 मापदंडों के साथ एक एक्स है। टीडीडी का उपयोग करते हुए, आप X x= new X(); AssertTrue(x.MyMethod(12,"abc"))वास्तव में विधि को लागू करने से पहले लिखते हैं । अपफ्रंट डिज़ाइन का उपयोग करते हुए, आप class X{ public bool MyMethod(int p, string q){/*...*/}}पहले लिख सकते हैं , और बाद में परीक्षण लिख सकते हैं। दोनों ही मामलों में, आपने एक ही डिजाइन निर्णय लिया है। यदि निर्णय एक अच्छा या बुरा था, तो TDD आपको नहीं बताएगा।
डॉक्टर ब्राउन

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

1
शीघ्र ही, इकाई परीक्षण एक घटक के आंतरिक डिजाइन में खामियां दिखा सकते हैं। इंटरफ़ेस, पूर्व और बाद की स्थिति पहले से जानी जानी चाहिए, अन्यथा आप इकाई परीक्षण नहीं बना सकते हैं। इसलिए घटक का डिज़ाइन जो इकाई परीक्षण से पहले घटक को प्रदर्शन करने की आवश्यकता है, लिखा जा सकता है। यह यह कैसे करता है - निचले स्तर के डिज़ाइन, विस्तृत डिज़ाइन या आंतरिक डिज़ाइन या जिसे आप इसे कॉल करना चाहते हैं - यूनिट टेस्ट लिखे जाने के बाद हो सकता है।
मार्टन बोदवेस

9

हैं, निश्चित रूप से यह है।

इस पर विचार करो:

  • एक इकाई परीक्षण एक छोटा, लक्षित टुकड़ा परीक्षण है जो एक छोटे से कोड का अभ्यास करता है। आप एक सभ्य कोड कवरेज प्राप्त करने के लिए उनमें से बहुत लिखते हैं, ताकि सभी (या अजीब बिट्स के बहुमत) का परीक्षण किया जाए।
  • एक एकीकरण परीक्षण परीक्षण का एक बड़ा, व्यापक टुकड़ा है जो आपके कोड की एक बड़ी सतह का अभ्यास करता है। आप एक सभ्य कोड कवरेज प्राप्त करने के लिए उनमें से कुछ लिखते हैं, ताकि सभी (या अजीब बिट्स के बहुमत) का परीक्षण किया जाए।

समग्र अंतर देखें…।

समस्या कोड कवरेज में से एक है, यदि आप एकीकरण / स्वीकृति परीक्षण का उपयोग करके अपने सभी कोड का पूर्ण परीक्षण प्राप्त कर सकते हैं, तो कोई समस्या नहीं है। आपके कोड का परीक्षण किया गया है। यही लक्ष्य है।

मुझे लगता है कि आपको उन्हें मिलाने की आवश्यकता हो सकती है, क्योंकि हर TDD- आधारित परियोजना के लिए बस यह सुनिश्चित करने के लिए कुछ एकीकरण परीक्षण की आवश्यकता होगी कि सभी इकाइयां वास्तव में एक साथ अच्छी तरह से काम करती हैं (मैं अनुभव से जानता हूं कि 100% उत्तीर्ण इकाई परीक्षण कोडबेस आवश्यक रूप से काम नहीं करता है जब आप उन सभी को एक साथ रखते हैं! "

समस्या वास्तव में परीक्षण की आसानी, विफलताओं को डिबग करने और उन्हें ठीक करने के लिए नीचे आती है। कुछ लोग पाते हैं कि उनकी इकाई परीक्षण इस पर बहुत अच्छे हैं, वे छोटे और सरल हैं और विफलताओं को देखना आसान है, लेकिन नुकसान यह है कि आपको इकाई परीक्षण उपकरण के अनुरूप अपने कोड को पुनर्गठित करना होगा, और उनमें से बहुत से लिखना होगा। एक एकीकरण परीक्षण बहुत सारे कोड को कवर करने के लिए लिखना अधिक कठिन है, और आपको शायद किसी भी विफलताओं को डिबग करने के लिए लॉगिंग जैसी तकनीकों का उपयोग करना होगा (हालांकि, मैं कहूंगा कि आपको इसे वैसे भी करना होगा, आप इकाई परीक्षण विफल नहीं कर सकते हैं जब साइट पर!)।

किसी भी तरह से, आप अभी भी परीक्षण कोड प्राप्त करते हैं, आपको बस यह तय करने की आवश्यकता है कि कौन सा तंत्र आपको बेहतर बनाता है। (मैं मिश्रण के एक बिट के साथ जाना होगा, यूनिट जटिल एल्गोरिदम का परीक्षण, और बाकी का परीक्षण एकीकृत)।


7
बिल्कुल सच नहीं है ... एकीकरण परीक्षण के साथ दो घटक हैं जो संभव हैं कि दोनों छोटी गाड़ी हैं, लेकिन उनके कीड़े एकीकरण परीक्षण में रद्द हो जाते हैं। यह तब तक बहुत ज्यादा मायने नहीं रखता जब तक कि अंतिम उपयोगकर्ता इसका उपयोग उस तरीके से न करे जिसमें से केवल एक घटक का उपयोग किया जाता है ...
माइकल शॉ

1
कोड कवरेज! = परीक्षण - एक दूसरे को रद्द करने वाले बग से अलग, उन परिदृश्यों के बारे में जो आपने कभी नहीं सोचा है? खुशहाली पथ परीक्षण के लिए एकीकरण परीक्षण ठीक है लेकिन जब चीजें अच्छी तरह से नहीं चल रही हों तो मैं शायद ही कभी एकीकरण परीक्षण देख पाऊं।
माइकल

4
@Ptolemy मुझे लगता है कि 2 बग्गी घटकों की दुर्लभता एक-दूसरे को रद्द कर रही है, 2 से कम काम करने वाले घटकों में एक दूसरे के साथ हस्तक्षेप करना बहुत दूर है।
gbjbaanb

2
@ मिचेल ने अभी आपको परीक्षण में पर्याप्त प्रयास नहीं किया है, मैंने कहा कि अच्छा एकीकरण परीक्षण करना अधिक कठिन है क्योंकि परीक्षणों को और अधिक विस्तृत करना है। आप एक एकीकरण परीक्षण में खराब डेटा की आपूर्ति कर सकते हैं जितनी आसानी से आप एक इकाई परीक्षण में कर सकते हैं। एकीकरण परीक्षण! = खुश मार्ग। इसके बारे में अधिक से अधिक कोड का उपयोग करने के बारे में, यही कारण है कि कोड कवरेज उपकरण हैं जो आपको दिखाते हैं कि आपके कोड का कितना उपयोग किया गया है।
gbjbaanb

1
@ मिचेल जब मैं ककड़ी या SpecFlow जैसे उपकरणों का सही ढंग से उपयोग करता हूं तो मैं एकीकरण परीक्षण बना सकता हूं जो इकाई परीक्षणों के रूप में अपवादों और चरम स्थितियों का भी परीक्षण करता है। लेकिन मैं मानता हूं कि यदि एक वर्ग को बहुत अधिक क्रमपरिवर्तन करना पड़े तो मैं इस वर्ग के लिए एक इकाई परीक्षण लिखना पसंद करता हूं। लेकिन यह केवल एक मुट्ठी भर रास्तों वाले वर्गों की तुलना में कम बार होगा।
यज्ञद्रसील

2

मुझे लगता है कि यह एक भयानक विचार है।

चूंकि किसी विशिष्ट लक्ष्य का परीक्षण करने के लिए आपके कोड के स्वीकृति परीक्षण और एकीकरण परीक्षण स्पर्श व्यापक होते हैं, इसलिए उन्हें समय के साथ अधिक रिफैक्टिंग की आवश्यकता होती है , कम नहीं। इससे भी बदतर यह है कि चूंकि वे कोड के व्यापक खंडों को कवर करते हैं, इसलिए जब आप खोज करने के लिए एक व्यापक क्षेत्र प्राप्त कर लेते हैं, तो वे मूल कारण को ट्रैक करने में आपके द्वारा खर्च किए गए समय को बढ़ा देते हैं।

नहीं, आपको आमतौर पर अधिक यूनिट परीक्षण लिखना चाहिए जब तक कि आपके पास एक अजीब ऐप नहीं है जो कि 90% यूआई या कुछ और है जो इकाई परीक्षण के लिए अजीब है। आपके द्वारा चलाए जा रहे दर्द इकाई परीक्षणों से नहीं हैं, लेकिन पहले विकास का परीक्षण कर रहे हैं। आम तौर पर, आपको ज्यादातर लेखन परीक्षणों में अपने समय का 1/3 भाग ही खर्च करना चाहिए। आखिरकार, वे वहाँ आपकी सेवा कर रहे हैं, इसके विपरीत नहीं।


2
मुख्य गोमांस जिसे मैं टीडीडी के खिलाफ सुनता हूं, वह प्राकृतिक विकास प्रवाह को बाधित करता है और शुरू से ही रक्षात्मक प्रोग्रामिंग को लागू करता है। यदि कोई प्रोग्रामर पहले से ही समय के दबाव में है, तो वे कोड को काटकर बाद में पॉलिश करना चाहते हैं। बेशक, छोटी गाड़ी कोड के साथ एक मनमानी समय सीमा को पूरा करना झूठी अर्थव्यवस्था है।
रॉबी डी

2
वास्तव में, विशेष रूप से "बाद में इसे पॉलिश करें" वास्तव में ऐसा कभी नहीं होता है - हर समीक्षा जो मैं करता हूं, जहां एक डेवलपर "इसे बाहर जाने की जरूरत है, हम इसे बाद में करेंगे" जब हम सभी जानते हैं, तो ऐसा होने वाला नहीं है - तकनीकी ऋण = मेरी राय में दिवालिया डेवलपर्स।
माइकल

3
जवाब मुझे समझ में आता है, पता नहीं क्यों यह इतने सारे minuses मिला। माइक कोहन को उद्धृत करने के लिए: "यूनिट परीक्षण एक ठोस परीक्षण स्वचालन रणनीति की नींव होनी चाहिए और जैसे कि पिरामिड के सबसे बड़े हिस्से का प्रतिनिधित्व करता है । स्वचालित इकाई परीक्षण अद्भुत हैं क्योंकि वे एक प्रोग्रामर को विशिष्ट डेटा देते हैं - एक बग है और यह चालू है। रेखा 47 " mountaingoatsoftware.com/blog/...
guillaume31

4
@ guillaume31 सिर्फ इसलिए कि कुछ लोगों ने एक बार कहा है कि वे अच्छे हैं, इसका मतलब यह नहीं है कि वे अच्छे हैं। मेरे अनुभव में बगों को यूनिट परीक्षणों द्वारा पता नहीं लगाया गया है, क्योंकि उन्हें नई आवश्यकता के लिए बदल दिया गया था। इसके अलावा अधिकांश कीड़े एकीकरण कीड़े हैं। इसके बाद मैं अपने एकीकरण परीक्षणों के साथ उनमें से अधिकांश का पता लगाता हूं।
यज्ञद्रसील

2
@Yggdrasil मैं मार्टिन फाउलर को भी उद्धृत कर सकता हूं: "यदि आपको उच्च स्तरीय परीक्षा में असफलता मिलती है, तो न केवल आपके कार्यात्मक कोड में एक बग है, आपके पास एक लापता इकाई परीक्षण भी है"। martinfowler.com/bliki/TestPyramid.html वैसे भी, यदि एकीकरण परीक्षण अकेले आपके लिए काम करते हैं, तो ठीक है। मेरा अनुभव यह है कि जरूरत पड़ने पर, वे धीमी होती हैं, यूनिट परीक्षणों की तुलना में कम सटीक विफलता संदेश और कम युद्धाभ्यास (अधिक दहनशील) प्रदान करती हैं। इसके अलावा, जब मैं एकीकरण परीक्षण लिखता हूं, तो मैं भविष्य में कम प्रमाण देता हूं - पूर्व के बारे में तर्क (गलत?) ने प्रति वस्तु की शुद्धता के बजाय परिदृश्यों की कल्पना की।
गुरिल्ला ३०

2

टीडीडी के साथ "जीत", यह है कि एक बार परीक्षण लिखे जाने के बाद, वे स्वचालित हो सकते हैं। फ्लिप पक्ष यह है कि यह विकास के समय के एक महत्वपूर्ण हिस्से का उपभोग कर सकता है। क्या यह वास्तव में पूरी प्रक्रिया को धीमा कर देता है या नहीं। यह तर्क कि अपफ्रंट परीक्षण विकास चक्र के अंत में तय की जाने वाली त्रुटियों की संख्या को कम करता है।

यह वह जगह है जहां बीडीडी व्यवहार में आता है क्योंकि इकाई परीक्षण के भीतर शामिल किया जा सकता है, इसलिए यह प्रक्रिया कम सार और अधिक मूर्त है।

स्पष्ट रूप से, यदि समय की एक अनंत राशि उपलब्ध थी, तो आप विभिन्न किस्मों के यथासंभव परीक्षण करेंगे। हालांकि, समय आम तौर पर सीमित है और नित्य परीक्षण केवल एक बिंदु तक प्रभावी है।

यह सब इस निष्कर्ष पर पहुंचाता है कि परीक्षण जो सबसे अधिक मूल्य प्रदान करते हैं, प्रक्रिया के सामने होना चाहिए। यह अपने आप में किसी अन्य पर एक प्रकार के परीक्षण का पक्ष नहीं लेता है - और अधिक यह कि प्रत्येक मामले को इसकी खूबियों पर लिया जाना है।

यदि आप व्यक्तिगत उपयोग के लिए कमांड लाइन विजेट लिख रहे हैं, तो आप मुख्य रूप से इकाई परीक्षणों में रुचि लेंगे। जबकि एक वेब सेवा का कहना है, इसके लिए पर्याप्त मात्रा में एकीकरण / व्यवहार परीक्षण की आवश्यकता होगी।

जब तक अधिकांश प्रकार के परीक्षण इस बात पर ध्यान केंद्रित करते हैं कि "रेसिंग लाइन" को क्या कहा जा सकता है, अर्थात आज के कारोबार के लिए क्या आवश्यक है, यूनिट परीक्षण सूक्ष्म बगों को बाहर निकालने में उत्कृष्ट है जो बाद के विकास के चरणों में सतह पर हो सकता है। चूंकि यह एक ऐसा लाभ है जिसे आसानी से नहीं मापा जा सकता है, इसे अक्सर अनदेखा किया जाता है।


1
मैं अपने परीक्षण अग्रिम लिखता हूं और अधिकांश त्रुटियों को कवर करने के लिए मैं पर्याप्त परीक्षण लिखता हूं। के रूप में कीड़े के लिए जो सतहों बाद में। यह मुझे लगता है, कि एक आवश्यकता बदल गई है या एक नई आवश्यकता खेल में आती है। एकीकरण / व्यवहार परीक्षणों की तुलना में, बदलने की जरूरत है। यदि तब एक बग को एक पुरानी आवश्यकता में दिखाया गया है, तो इसके लिए मेरा परीक्षण इसे दिखाएगा। स्वचालन के लिए के रूप में। मेरे सभी परीक्षण हर समय चलते हैं।
यज्ञद्रसील

अंतिम पैराग्राफ में मैं जिस उदाहरण के बारे में सोच रहा था, वह यह है कि एक पुस्तकालय का उपयोग विशेष रूप से एक एकल अनुप्रयोग द्वारा किया जाता था, लेकिन तब इसे एक सामान्य उद्देश्य पुस्तकालय बनाने के लिए व्यावसायिक आवश्यकता थी। इस मामले में यह बेहतर हो सकता है कि आप पुस्तकालय में संलग्न हर प्रणाली के लिए नए एकीकरण / व्यवहार परीक्षण लिखने के बजाय कम से कम कुछ इकाई परीक्षण करें।
रॉबी डी

2
स्वचालित परीक्षण और इकाई परीक्षण पूरी तरह से ओर्थोगोनल पदार्थ हैं। किसी भी स्वाभिमानी परियोजना में स्वचालित एकीकरण और कार्यात्मक परीक्षण होगा। दी, आप अक्सर मैनुअल यूनिट परीक्षण नहीं देखते हैं, लेकिन वे मौजूद हो सकते हैं (मूल रूप से मैनुअल यूनिट परीक्षण कुछ विशिष्ट कार्यक्षमता के लिए एक परीक्षण उपयोगिता है)।
Jan Hudec

सच में। स्वचालित 3 पार्टी उपकरणों के लिए एक समृद्ध बाजार रहा है जो कुछ समय के लिए विकास क्षेत्र के बाहर मौजूद हैं।
रॉबी डी

1

यूनिट परीक्षणों का अंतिम लाभ यह है कि वे तेज होते हैं। मैंने यह जानने के लिए पर्याप्त एकीकरण परीक्षण लिखे हैं, कि वे इकाई परीक्षणों के समान लगभग तेज़ हो सकते हैं।

यह प्रमुख बिंदु है, और न केवल "अंतिम लाभ" है। जब प्रोजेक्ट बड़ा और बड़ा हो जाता है, तो आपकी एकीकरण स्वीकृति परीक्षण धीमी और धीमी होती जा रही है। और यहां, मेरा मतलब इतना धीमा है कि आप उन्हें निष्पादित करना बंद करने जा रहे हैं।

बेशक, यूनिट परीक्षण धीमे होते जा रहे हैं, लेकिन वे अभी भी तीव्रता के क्रम से अधिक हैं। उदाहरण के लिए, मेरी पिछली परियोजना में (सी ++, कुछ 600 केएलओसी, 4000 यूनिट परीक्षण और 200 एकीकरण परीक्षण), सभी को निष्पादित करने में लगभग एक मिनट का समय लगा और फिर 15 से एकीकरण परीक्षण निष्पादित करने में। परिवर्तित किए जा रहे भाग के लिए यूनिट परीक्षणों का निर्माण और निष्पादित करने के लिए, औसतन 30 सेकंड से कम समय लगेगा। जब आप इसे इतनी तेजी से कर सकते हैं, तो आप इसे हर समय करना चाहेंगे।

बस यह स्पष्ट करने के लिए: मैं एकीकरण और स्वीकृति परीक्षणों को जोड़ने के लिए नहीं कहता, लेकिन ऐसा लगता है कि आपने TDD / BDD गलत तरीके से किया।

यूनिट टेस्ट डिजाइन के लिए भी अच्छे हैं।

हां, टेस्टीबिलिटी को ध्यान में रखकर डिजाइन बेहतर बनाएंगे।

समस्या यह थी कि विकास के समय का लगभग आधा हिस्सा लेखन / रिफलेक्टर परीक्षणों के लिए था। इसलिए अंत में मैं और अधिक सुविधाओं को लागू नहीं करना चाहता था क्योंकि मुझे कई परीक्षण करने के लिए रिफैक्ट करने और लिखने की आवश्यकता होगी।

ठीक है, जब आवश्यकताएं बदल जाती हैं, तो आपको कोड बदलना होगा। अगर आप इकाई परीक्षण नहीं लिखते तो मैं आपको अपना काम पूरा नहीं करने देता। लेकिन इसका मतलब यह नहीं है कि आपके पास इकाई परीक्षणों के साथ 100% कवरेज होना चाहिए - यह लक्ष्य नहीं है। कुछ चीजें (जैसे GUI, या किसी फ़ाइल तक पहुँच ...) का परीक्षण इकाई होने के लिए भी नहीं है।

इसका परिणाम बेहतर कोड गुणवत्ता, और परीक्षण की एक और परत है। मैं कहूंगा कि यह इसके लायक है।


हमारे पास कई अतिरिक्त परीक्षण भी थे, और सभी को निष्पादित करने में पूरे सप्ताह का समय लगेगा।


1
क्या आपने मेरे उदाहरण को देखा है? हर समय यही हुआ। बिंदु यह है कि जब मैं एक नई सुविधा लागू करता हूं तो मैं इकाई परीक्षण को बदल / जोड़ देता हूं ताकि वे नई सुविधा का परीक्षण करें - इसलिए कोई इकाई परीक्षण नहीं टूटेगा। ज्यादातर मामलों में मेरे पास उन परिवर्तनों के साइड इफेक्ट होते हैं जो यूनिट परीक्षणों द्वारा नहीं पाए जाते हैं - क्योंकि पर्यावरण का मज़ाक उड़ाया जाता है। मेरे अनुभव के कारण इस इकाई के परीक्षण ने मुझे कभी नहीं बताया कि मैंने एक मौजूदा सुविधा को तोड़ा है। यह हमेशा एकीकरण और स्वीकृति परीक्षण था जिसने मुझे मेरी गलतियों को दिखाया।
यज्ञद्रासिल

निष्पादन समय के लिए के रूप में। एक बढ़ती हुई एप्लिकेशन के साथ मेरे पास ज्यादातर पृथक घटकों की बढ़ती संख्या है। अगर नहीं तो मैंने कुछ गलत किया है। जब मैं एक नई सुविधा लागू करता हूं तो यह केवल सीमित संख्या में घटकों में होती है। मैं पूरे आवेदन के दायरे में एक या अधिक स्वीकृति परीक्षण लिखता हूं - जो धीमा हो सकता है। इसके अतिरिक्त मैं घटकों के दृष्टिकोण से समान परीक्षण लिखता हूं - यह परीक्षण तेजी से होते हैं, क्योंकि घटक आमतौर पर तेज होते हैं। मैं हर समय घटक परीक्षणों को निष्पादित कर सकता हूं, क्योंकि वे काफी तेज हैं।
यज्ञद्रसील

@Yggdrasil जैसा कि मैंने कहा, इकाई परीक्षण सभी शक्तिशाली नहीं हैं, लेकिन वे आम तौर पर परीक्षण की पहली परत हैं, क्योंकि वे सबसे तेज़ हैं। अन्य परीक्षण भी उपयोगी हैं, और संयुक्त होना चाहिए।
B14овиЈ

1
सिर्फ इसलिए कि वे तेज हैं, इसका मतलब यह नहीं है कि उनका उपयोग सिर्फ इस वजह से किया जाना चाहिए या क्योंकि उन्हें लिखना आम है। जैसे मैंने कहा कि मेरी यूनिट के परीक्षण नहीं टूटते हैं - इसलिए मेरे लिए उनका कोई मूल्य नहीं है।
यज्ञद्रसील

1
सवाल था, यूनिट टेस्ट से मेरा क्या मूल्य है, जब वे नहीं टूटते हैं? जब उन्हें हमेशा नई आवश्यकताओं के लिए समायोजित करने की आवश्यकता होती है, तो उन्हें लिखने से क्यों परेशान होते हैं? उनमें से एकमात्र मूल्य जो मैं देख रहा हूं वह एल्गोरिदम और अन्य वर्गों के लिए एक उच्च क्रमपरिवर्तन के साथ है। लेकिन ये घटक और स्वीकृति परीक्षणों से कम हैं।
यज्ञद्रसिल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.