Go में TDD: बिना किसी डर और दोष के कोड लिखना

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: TDD कोई धर्म क्यों नहीं, बल्कि एक जीवन रक्षक है

\n\n

कल्पना करें कि आप एक पुराने घर में बिजली के तारों की मरम्मत कर रहे हैं। आप मुख्य स्विच बंद कर देते हैं, लेकिन फिर भी पैनल में हाथ डालने से डरते हैं। एक डेवलपर जो बिना टेस्ट के प्रोजेक्ट में बदलाव करता है, वह लगभग ऐसा ही महसूस करता है। खासकर Go में - एक ऐसी भाषा जहाँ स्टैटिक टाइपिंग सुरक्षा की झूठी भावना देती है।

\n\n

Go में टेस्ट-ड्रिवेन डेवलपमेंट (TDD) कोई फैशनेबल ट्रेंड या संप्रदाय का अनुष्ठान नहीं है। यह एक पद्धति है जो रिफैक्टरिंग के डर को आत्मविश्वास में बदल देती है। IBM के एक अध्ययन के अनुसार, TDD वाले प्रोजेक्ट्स में 40% कम दोष पाए जाते हैं। और Go में, जहाँ कंपाइलर पहले ही आधी गलतियों को काट देता है, TDD बाकी 50% को खत्म कर देता है।

\n\n

इस लेख में हम व्याख्यान नहीं देंगे। हम एक वास्तविक समस्या लेंगे: हम लिंक शॉर्टनिंग के लिए एक छोटी HTTP सेवा लिखेंगे। और हम TDD का पूरा सफर तय करेंगे - रेड टेस्ट से लेकर ग्रीन और रिफैक्टरिंग तक। चलिए शुरू करते हैं!

\n\n

वास्तव में TDD क्या है?

\n\n

अगर आपने Red-Green-Refactor के बारे में सुना है - तो आप पहले से ही जानते हैं। अगर नहीं - तो तीन सरल चरण याद रखें:

\n\n
    \n
  1. Red - हम एक ऐसा टेस्ट लिखते हैं जो जानबूझकर फेल होता है (क्योंकि फंक्शनैलिटी अभी मौजूद नहीं है)।
  2. \n
  3. Green - हम न्यूनतम कोड लिखते हैं ताकि टेस्ट पास हो जाए। आदर्श नहीं, बस काम करने वाला।
  4. \n
  5. Refactor - हम कोड को बेहतर बनाते हैं, उसके व्यवहार को बदले बिना। टेस्ट हमारी सुरक्षा हैं।
  6. \n
\n\n

Go में यह चक्र विशेष रूप से सुखद है, इसके बिल्ट-इन पैकेज testing के कारण। आपको jest या pytest इंस्टॉल करने की ज़रूरत नहीं है - सब कुछ पहले से ही स्टैंडर्ड लाइब्रेरी में मौजूद है। लेकिन कई शुरुआती टेस्ट को नज़रअंदाज़ करते हैं, यह सोचकर कि Go वैसे भी "सुरक्षित" है। और यह गलत है।

\n\n

Go में TDD दूसरी भाषाओं की तुलना में बेहतर क्यों काम करता है?

\n\n

Go समुदाय सादगी को पसंद करता है। यहाँ TDD मॉक और स्टब के साथ नौकरशाही में नहीं बदलता। इसके बजाय, आप टेबल-ड्रिवेन टेस्ट (table-driven tests) लिखते हैं - संक्षिप्त, पढ़ने योग्य, समझने योग्य। एक टेस्ट केस - एक पंक्ति। और हाँ, Go टेस्ट तेज़ी से काम करते हैं। सैकड़ों केसों पर मिलीसेकंड - यह सामान्य है।

\n\n

वैसे, Go के आधिकारिक ब्लॉग में कई बार जोर दिया गया है: "टेस्ट ही दस्तावेज़ीकरण हैं।" अगर आपका टेस्ट एक स्पेसिफिकेशन की तरह पढ़ा जाता है - तो आप सब कुछ सही कर रहे हैं।

\n\n

पर्यावरण सेट अप करना: शुरुआत के लिए क्या चाहिए

\n\n

मान लेता हूँ कि आपके पास Go पहले से इंस्टॉल है। अगर नहीं - brew install go या apt install golang-go। वर्जन चेक करें: go version। इस लेख के लिए Go 1.21+ काफी है।

\n\n

प्रोजेक्ट बनाते हैं:

\n\n
mkdir url-shortener-tdd\ncd url-shortener-tdd\ngo mod init url-shortener
\n\n

हो गया। कोई फ्रेमवर्क नहीं - केवल स्टैंडर्ड लाइब्रेरी और Go टेस्ट-ड्रिवेन डेवलपमेंट।

\n\n

पहला टेस्ट लिखना: Red

\n\n

मान लीजिए, हम एक फंक्शन Shorten(url string) string चाहते हैं, जो लंबे URL को छोटे हैश में बदल दे। यह अभी मौजूद नहीं है - और यह बहुत अच्छा है। टेस्ट लिखते हैं:

\n\n
// shortener_test.go\npackage main\n\nimport "testing"\n\nfunc TestShorten(t *testing.T) {\n    url := "https://pythonlib.ru/very/long/path?with=params&and=stuff"\n    result := Shorten(url)\n\n    if len(result) == 0 {\n        t.Error("Shorten ने खाली स्ट्रिंग लौटाई")\n    }\n\n    if len(result) > 10 {\n        t.Errorf("छोटे हैश की उम्मीद थी, %d अक्षर मिले", len(result))\n    }\n}
\n\n

चलाते हैं: go test -v। हमें लाल (तकनीकी रूप से - कंपाइलेशन एरर) दिखता है। फंक्शन Shorten मौजूद नहीं है। बढ़िया, हम Red चरण पर हैं।

\n\n

न्यूनतम कोड: Green

\n\n

अब हम उतना ही कोड लिखते हैं जितना टेस्ट पास करने के लिए ज़रूरी है। कोई क्रिप्टोग्राफी नहीं, बस एक हैश:

\n\n
// shortener.go\npackage main\n\nimport (\n    "crypto/sha256"\n    "fmt"\n)\n\nfunc Shorten(url string) string {\n    hash := sha256.Sum256([]byte(url))\n    return fmt.Sprintf("%x", hash[:4]) // पहले 4 बाइट लेते हैं\n}
\n\n

टेस्ट फिर से चलाते हैं। ग्रीन? बहुत बढ़िया। लेकिन कोड भयानक है - हैश में टकराव हो सकता है, और हम यह भी नहीं जाँच रहे हैं कि

ब्लॉग

पुस्तक अनुशंसाएँ