babyapi के सरल उदाहरण का उपयोग करके प्रारंभिक main.go बनाएं
टेस्ट बॉयलरप्लेट बनाने के लिए सीएलआई का उपयोग करें
अपेक्षित JSON के साथ प्लेसहोल्डर भरकर प्रत्येक परीक्षण को कार्यान्वित करें
परीक्षण चलाएं और देखें कि वे उत्तीर्ण होते हैं!
चूंकि PUT निष्क्रिय है, इसलिए इसमें सभी क्षेत्रों को शामिल करना आवश्यक है। इससे बचने के लिए, हम PATCH अनुरोधों के साथ पूर्ण टॉगल के लिए समर्थन जोड़ना चाहते हैं। हम इस सुविधा के दिखने की अपेक्षा के लिए एक सरल परीक्षण जोड़कर शुरुआत करते हैं
यह परीक्षण विफल हो गया क्योंकि बेबीएपी डिफ़ॉल्ट रूप से PATCH का समर्थन नहीं करता है। हम TODO संरचना के लिए पैच लागू करके इसे ठीक कर सकते हैं। चूंकि हमने अपनी सुविधा को दो परीक्षणों के साथ परिभाषित किया है, हमारा सबसे सरल कार्यान्वयन केवल पूर्ण = सत्य सेट करना नहीं है और हमें अनुरोध से मूल्य का उपयोग करना होगा
अब हम TODO की पूर्ण स्थिति को बदल सकते हैं, लेकिन हम अभी भी अन्य फ़ील्ड को संशोधित करने के लिए PATCH का उपयोग नहीं कर सकते हैं जैसा कि परीक्षणों के इस नए सेट से पता चलता है
शेष फ़ील्ड सेट करने के लिए पैच अपडेट करें
हमारे परीक्षण अभी भी विफल हैं क्योंकि हम हमेशा अनुरोध फ़ील्ड के साथ TODO को अपडेट करते हैं, भले ही वे खाली हों। खाली मानों की जांच के लिए कार्यान्वयन को अद्यतन करके इसे ठीक करें
नया अपडेटविथपैच परीक्षण पास हो जाता है, लेकिन हमारे पिछले परीक्षण विफल हो जाते हैं। चूंकि हमने पूर्ण को *बूल में बदल दिया है, खाली मान के साथ बनाए गए TODO शून्य के रूप में दिखाई देंगे
TODO के लिए रेंडर लागू करें ताकि हम शून्य को गलत मान सकें
परीक्षण-संचालित विकास के साथ PATCH सुविधा को लागू करने से परीक्षणों का एक मजबूत सेट और एक अच्छी तरह से कार्यान्वित सुविधा प्राप्त हुई। चूंकि हमने परीक्षणों में PATCH अनुरोध के अपेक्षित इनपुट और आउटपुट को परिभाषित करके शुरुआत की थी, इसलिए अनुरोध में खाली मानों की जांच न करने के कारण होने वाली समस्याओं को देखना आसान था। साथ ही, हमारे पहले से मौजूद परीक्षण पूर्ण के प्रकार को *बूल में बदलते समय परिवर्तनों को तोड़ने से बचाने में सक्षम थे।
पूरी तरह से परीक्षण और सही कोड बनाने के लिए परीक्षण-संचालित विकास एक प्रभावी दृष्टिकोण है। परीक्षणों को ध्यान में रखकर शुरुआत करके, हम यह सुनिश्चित कर सकते हैं कि कोड का प्रत्येक भाग परीक्षण को बाद में सोचने के बजाय परीक्षण योग्य बनाने के लिए डिज़ाइन किया गया है।
यदि आप टीडीडी को अपनाने में झिझक रहे हैं, तो आरंभ करने के लिए यहां कुछ उपाय दिए गए हैं:
भले ही टीडीडी आपके कोड लिखने के तरीके के लिए उपयुक्त नहीं है, फिर भी यह आपके लिए एक शक्तिशाली उपकरण है। मैं आपको इसे आज़माने के लिए कम से कम कुछ समय देने और यह देखने के लिए प्रोत्साहित करता हूं कि यह आपकी विकास प्रक्रिया को कैसे प्रभावित करता है।
","image":"http://www.luping.net/uploads/20240730/172232678666a89f02dc4a5.jpg","datePublished":"2024-07-30T16:06:26+08:00","dateModified":"2024-07-30T16:06:26+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}टेस्ट-संचालित विकास अच्छी तरह से परीक्षण और रिफैक्टेबल कोड सुनिश्चित करने के लिए एक प्रभावी तरीका है। मूल विचार यह है कि आप परीक्षण लिखकर विकास शुरू करें। ये परीक्षण स्पष्ट रूप से अपेक्षाओं का दस्तावेजीकरण करते हैं और सफल कार्यान्वयन के लिए रूब्रिक बनाते हैं। जब ठीक से किया जाता है, तो आप किसी भी कोड को लिखने से पहले किसी फ़ंक्शन के अपेक्षित इनपुट/आउटपुट को स्पष्ट रूप से परिभाषित कर सकते हैं। इसके कुछ तात्कालिक लाभ हैं:
अब जब आप लाभों के बारे में आश्वस्त हो गए हैं, तो आप इन चरणों का पालन करके परीक्षण-संचालित विकास (टीडीडी) शुरू कर सकते हैं:
इन चरणों का पालन एक चक्र में किया जाता है इसलिए आप वर्तमान कार्यान्वयन को चुनौती देने के लिए हमेशा अधिक परीक्षण जोड़ते रहते हैं।
अंतिम चरण, जो न्यूनतम मात्रा में कोड लिखने को निर्दिष्ट करता है, जहां कठोरता से पालन करने पर चीजें कठिन हो सकती हैं। यह समझना महत्वपूर्ण है कि यह नियम क्यों मौजूद है, इससे पहले कि आप यह निर्धारित कर सकें कि इससे भटकना कब उचित है।
आपको Add(x, y int) int फ़ंक्शन को लागू करने का काम सौंपा गया है। इससे पहले कि आप कार्यान्वयन पर जाएं और बस xy वापस लौटें, सबसे सरल परीक्षण लिखें: 1 1 == 2. फिर, सबसे सरल कार्यान्वयन क्या है जो परीक्षण पास करेगा? यह अभी वापसी 2 है। अब आपके परीक्षण पास हो गए हैं!
इस बिंदु पर, आपको एहसास होता है कि आपको और अधिक परीक्षणों की आवश्यकता है, इसलिए आप गति बढ़ाते हैं और कुछ और जोड़ते हैं:
अब आपके परीक्षण विफल हो गए हैं, इसलिए आपको कार्यान्वयन को ठीक करने की आवश्यकता है। इस बार आप केवल 3 या 105 नहीं लौटा सकते, इसलिए आपको एक ऐसा समाधान ढूंढना होगा जो सभी परीक्षणों के लिए काम करे। इससे कार्यान्वयन होता है: रिटर्न x y.
हालांकि यह मामूली उदाहरण में अत्यधिक थकाऊ लगता है, इस पद्धति का कड़ाई से पालन करने से आपको केवल अपने कार्यान्वयन पर भरोसा करने के बजाय कई परीक्षण लिखने पड़े। बेशक, xy को वापस करने का आपका प्रारंभिक विचार काम कर गया होगा, लेकिन मुद्दा यह है कि कोड की अपनी समझ के बजाय परीक्षणों पर भरोसा करने के लिए खुद को फिर से प्रशिक्षित करें। वास्तविक दुनिया में, आप कोड के इस टुकड़े पर काम करने वाले अकेले नहीं हैं और अनिवार्य रूप से कार्यान्वयन विवरण भूल जाएंगे। यह प्रक्रिया आपको अधिक परीक्षण लिखने और सरल कार्यान्वयन को तोड़ने के अधिक तरीकों के बारे में सोचने के लिए मजबूर करती है।
आखिरकार, आप अनुभव प्राप्त करेंगे और आपके सामने आने वाले विभिन्न परिदृश्यों में काम करने वाला संतुलन बनाना सीखेंगे। आप सुविधाओं के पूर्ण-गति कार्यान्वयन पर वापस लौटेंगे और पाएंगे कि आपके पास कम बग हैं और अधिक रखरखाव योग्य कोड लिखेंगे।
आइए HTTP REST API के लिए TDD का उपयोग करके एक अधिक जटिल उदाहरण देखें। यह चरण-दर-चरण मार्गदर्शिका मेरे गो फ्रेमवर्क, बेबीएपी का उपयोग करती है, लेकिन अवधारणाओं को कहीं भी लागू किया जा सकता है।
बेबीएपीआई गो स्ट्रक्चर्स के आसपास एक पूर्ण सीआरयूडी एपीआई बनाने के लिए जेनेरिक का उपयोग करता है, जिससे पूर्ण आरईएसटी एपीआई और क्लाइंट सीएलआई बनाना बहुत आसान हो जाता है। इसके अलावा, बेबीटेस्ट पैकेज एंड-टू-एंड एपीआई टेबल टेस्ट बनाने के लिए कुछ टूल प्रदान करता है। एपीआई-स्तर पर टीडीडी का उपयोग करने से एक नए एपीआई या फीचर की HTTP और स्टोरेज परतों का एक साथ पूरी तरह से परीक्षण करने की अनुमति मिलती है।
अस्वीकरण: चूंकि बेबीएपी अधिकांश कार्यान्वयन को संभालता है और इसका उपयोग परीक्षण बॉयलरप्लेट उत्पन्न करने के लिए भी किया जाता है, हम तकनीकी रूप से टीडीडी से शुरुआत नहीं कर रहे हैं। हालाँकि, हम देखेंगे कि हमारे एपीआई में PATCH अनुरोधों के लिए समर्थन जोड़ते समय यह कितना फायदेमंद है।
एक नया गो प्रोजेक्ट बनाएं
babyapi के सरल उदाहरण का उपयोग करके प्रारंभिक main.go बनाएं
टेस्ट बॉयलरप्लेट बनाने के लिए सीएलआई का उपयोग करें
अपेक्षित JSON के साथ प्लेसहोल्डर भरकर प्रत्येक परीक्षण को कार्यान्वित करें
परीक्षण चलाएं और देखें कि वे उत्तीर्ण होते हैं!
चूंकि PUT निष्क्रिय है, इसलिए इसमें सभी क्षेत्रों को शामिल करना आवश्यक है। इससे बचने के लिए, हम PATCH अनुरोधों के साथ पूर्ण टॉगल के लिए समर्थन जोड़ना चाहते हैं। हम इस सुविधा के दिखने की अपेक्षा के लिए एक सरल परीक्षण जोड़कर शुरुआत करते हैं
यह परीक्षण विफल हो गया क्योंकि बेबीएपी डिफ़ॉल्ट रूप से PATCH का समर्थन नहीं करता है। हम TODO संरचना के लिए पैच लागू करके इसे ठीक कर सकते हैं। चूंकि हमने अपनी सुविधा को दो परीक्षणों के साथ परिभाषित किया है, हमारा सबसे सरल कार्यान्वयन केवल पूर्ण = सत्य सेट करना नहीं है और हमें अनुरोध से मूल्य का उपयोग करना होगा
अब हम TODO की पूर्ण स्थिति को बदल सकते हैं, लेकिन हम अभी भी अन्य फ़ील्ड को संशोधित करने के लिए PATCH का उपयोग नहीं कर सकते हैं जैसा कि परीक्षणों के इस नए सेट से पता चलता है
शेष फ़ील्ड सेट करने के लिए पैच अपडेट करें
हमारे परीक्षण अभी भी विफल हैं क्योंकि हम हमेशा अनुरोध फ़ील्ड के साथ TODO को अपडेट करते हैं, भले ही वे खाली हों। खाली मानों की जांच के लिए कार्यान्वयन को अद्यतन करके इसे ठीक करें
नया अपडेटविथपैच परीक्षण पास हो जाता है, लेकिन हमारे पिछले परीक्षण विफल हो जाते हैं। चूंकि हमने पूर्ण को *बूल में बदल दिया है, खाली मान के साथ बनाए गए TODO शून्य के रूप में दिखाई देंगे
TODO के लिए रेंडर लागू करें ताकि हम शून्य को गलत मान सकें
परीक्षण-संचालित विकास के साथ PATCH सुविधा को लागू करने से परीक्षणों का एक मजबूत सेट और एक अच्छी तरह से कार्यान्वित सुविधा प्राप्त हुई। चूंकि हमने परीक्षणों में PATCH अनुरोध के अपेक्षित इनपुट और आउटपुट को परिभाषित करके शुरुआत की थी, इसलिए अनुरोध में खाली मानों की जांच न करने के कारण होने वाली समस्याओं को देखना आसान था। साथ ही, हमारे पहले से मौजूद परीक्षण पूर्ण के प्रकार को *बूल में बदलते समय परिवर्तनों को तोड़ने से बचाने में सक्षम थे।
पूरी तरह से परीक्षण और सही कोड बनाने के लिए परीक्षण-संचालित विकास एक प्रभावी दृष्टिकोण है। परीक्षणों को ध्यान में रखकर शुरुआत करके, हम यह सुनिश्चित कर सकते हैं कि कोड का प्रत्येक भाग परीक्षण को बाद में सोचने के बजाय परीक्षण योग्य बनाने के लिए डिज़ाइन किया गया है।
यदि आप टीडीडी को अपनाने में झिझक रहे हैं, तो आरंभ करने के लिए यहां कुछ उपाय दिए गए हैं:
भले ही टीडीडी आपके कोड लिखने के तरीके के लिए उपयुक्त नहीं है, फिर भी यह आपके लिए एक शक्तिशाली उपकरण है। मैं आपको इसे आज़माने के लिए कम से कम कुछ समय देने और यह देखने के लिए प्रोत्साहित करता हूं कि यह आपकी विकास प्रक्रिया को कैसे प्रभावित करता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3