जब कोड कहानी बन जाता है
\nकल्पना करें: आप Go में कोड लिख रहे हैं, टेस्ट चलाते हैं — हरी पट्टी। लेकिन मैनेजर आपके t.Errorf को देखता है और समझ नहीं पाता कि वास्तव में क्या टूटा है। बिजनेस कहता है: "ऐसा बनाओ कि यूज़र रजिस्टर कर सके", और डेवलपर इसे "POST /api/v1/user ईमेल वैलिडेशन के साथ" में बदल देता है। तकनीकी और मानवीय भाषा के बीच का यह अंतर कई प्रोजेक्ट्स का सबसे बड़ा सिरदर्द है।
इसका समाधान है — Go में BDD (Behaviour-Driven Development)। यह सिर्फ टेस्ट नहीं है। यह कोड और बिज़नेस लॉजिक के बीच का पुल है। इस लेख में, हम वास्तविक उदाहरणों के साथ Go में BDD टेस्ट लिखना सीखेंगे, और जानेंगे कि क्यों आपका प्रोडक्ट मैनेजर आपका आभारी होगा।
\n\nBDD क्या है और Go क्यों?
\nBehaviour-Driven Development (व्यवहार-संचालित विकास) TDD का विकसित रूप है। अगर TDD 'कैसे' पर ध्यान केंद्रित करता है (फंक्शन को कैसे लागू करें), तो BDD 'क्या' का जवाब देता है (सिस्टम को यूज़र के नज़रिए से क्या करना चाहिए)।
\nGo अपनी सादगी, बिल्ट-इन testing पैकेज और Ginkgo व Godog जैसे शक्तिशाली फ्रेमवर्क के कारण BDD के लिए आदर्श है। Go समुदाय माइक्रोसर्विसेज, API और यहां तक कि CLI टूल्स के लिए BDD का सक्रिय रूप से उपयोग करता है।
Go में BDD के मुख्य सिद्धांत
\n- \n
- सार्वभौमिक भाषा (Ubiquitous Language) — स्क्रिप्ट्स व्यवसाय को समझ आने वाली भाषा में लिखी जाती हैं। \n
- Given-When-Then — किसी भी स्क्रिप्ट की संरचना: पूर्व शर्तें → कार्य → अपेक्षित परिणाम। \n
- स्वचालन — स्क्रिप्ट्स Go में निष्पादन योग्य टेस्ट में बदल जाती हैं। \n
Go में BDD के लिए उपकरण
\nफ्रेमवर्क का चुनाव इस बात पर निर्भर करता है कि आप स्क्रिप्ट्स का वर्णन कैसे करना चाहते हैं। यहाँ दो मुख्य दृष्टिकोण हैं:
\n\n1. Ginkgo + Gomega (Go डेवलपर्स के लिए)
\nGinkgo एक BDD फ्रेमवर्क है जो शुद्ध Go में लिखा जाता है। स्क्रिप्ट्स पढ़ने योग्य विवरणों के साथ Go कोड जैसी दिखती हैं। Gomega एसर्ट के लिए मैचर्स की लाइब्रेरी है।
\nलाभ: कोड पर पूर्ण नियंत्रण, Go टूलिंग के साथ शानदार एकीकरण, एसिंक्रोनस टेस्ट के लिए समर्थन।
\n\n2. Godog (Go के लिए Cucumber)
\nGodog Go पर Cucumber का कार्यान्वयन है। आप Gherkin (प्राकृतिक भाषा में Feature फ़ाइलें) में स्क्रिप्ट्स लिखते हैं, फिर Go में स्टेप्स को लागू करते हैं।
\nलाभ: स्क्रिप्ट्स को गैर-प्रोग्रामर भी पढ़ सकते हैं, कोड बदले बिना लॉजिक बदलना आसान है।
\n\nअभ्यास: Ginkgo के साथ Go में BDD टेस्ट लिखना
\nचलिए एक सरल सर्विस बनाते हैं — ई-कॉमर्स कार्ट। हम एक BDD टेस्ट लिखेंगे जो उत्पाद जोड़ने की जाँच करता है।
\n\nचरण 1: Ginkgo इंस्टॉल करें
\ngo get github.com/onsi/ginkgo/v2\ngo get github.com/onsi/gomega\n\nचरण 2: टेस्ट पैकेज इनिशियलाइज़ करें
\ncd mycart\nginkgo bootstrap\nइससे mycart_suite_test.go फ़ाइल बनती है।
चरण 3: स्क्रिप्ट लिखें
\ncart_test.go फ़ाइल बनाएँ:
package mycart_test\n\nimport (\n . "github.com/onsi/ginkgo/v2"\n . "github.com/onsi/gomega"\n "mycart"\n)\n\nvar _ = Describe("कार्ट", func() {\n var cart *mycart.Cart\n\n BeforeEach(func() {\n cart = mycart.NewCart()\n })\n\n Describe("उत्पाद जोड़ना", func() {\n Context("सही ID और कीमत के साथ", func() {\n It("आइटम्स की संख्या 1 बढ़ानी चाहिए", func() {\n cart.AddItem("sku-123", 100.0)\n Expect(cart.TotalItems()).To(Equal(1))\n })\n\n It("कुल राशि सही ढंग से गणना करनी चाहिए", func() {\n cart.AddItem("sku-123", 100.0)\n cart.AddItem("sku-456", 250.0)\n Expect(cart.TotalPrice()).To(BeNumerically("~", 350.0, 0.01))\n })\n })\n\n Context("जब उत्पाद पहले से मौजूद हो", func() {\n It("नया आइटम जोड़ने के बजाय मात्रा बढ़ानी चाहिए", func() {\n cart.