BDD क्या है और यह आपके प्रोजेक्ट को कैसे बचाएगा?
\n\nक्या आप कभी ऐसी स्थिति में रहे हैं जब डेवलपर्स कहते हैं: "लॉजिक बिल्कुल सही काम कर रहा है", और ग्राहक जवाब देता है: "लेकिन यह वह नहीं है जो मैंने मांगा था!"? परिचित लगता है? यहीं पर BDD (Behaviour-Driven Development) — व्यवहार-संचालित विकास — मंच पर आता है।
\n\nJava पर BDD सिर्फ एक फैशनेबल शब्द नहीं है। यह एक पद्धति है जो व्यावसायिक आवश्यकताओं और कोड के बीच की रेखा को मिटा देती है। सूखे तकनीकी परीक्षण (जैसे TDD में) लिखने के बजाय, आप मानव-समझने योग्य भाषा में स्क्रिप्ट लिखते हैं। और हाँ, उन्हें आपका प्रबंधक भी पढ़ सकता है, जो सोचता है कि "Java एक द्वीप है"।
\n\nBDD, TDD से कैसे अलग है? (स्पॉयलर: ये एक ही नहीं हैं)
\n\nबहुत से लोग TDD (Test-Driven Development) और BDD को भ्रमित करते हैं। आइए इसे स्पष्ट करें:
\n\n- \n
- TDD: आप एक परीक्षण लिखते हैं जो विफल होता है, फिर कोड लिखते हैं ताकि परीक्षण पास हो जाए। ध्यान तकनीकी कार्यान्वयन पर है। \n
- BDD: आप पहले उपयोगकर्ता के संदर्भ में सिस्टम के व्यवहार का वर्णन करते हैं। "जब उपयोगकर्ता बटन दबाता है, तो सिस्टम यह करता है"। ध्यान व्यावसायिक मूल्य पर है। \n
BDD Gherkin का उपयोग करता है — Given, When, Then कीवर्ड वाली एक स्क्रिप्ट भाषा। यह कुछ इस तरह दिखता है:
Feature: लॉगिन पेज\n Scenario: सही डेटा के साथ सफल लॉगिन\n Given उपयोगकर्ता लॉगिन पेज पर है\n When उपयोगकर्ता लॉगिन "admin" और पासवर्ड "12345" दर्ज करता है\n Then उपयोगकर्ता "स्वागत है!" संदेश देखता है\n\n\nमान गए, यह एक निर्देश की तरह पढ़ा जाता है, न कि तकनीकी दस्तावेज़ की तरह। Java पर व्यवहार-संचालित विकास की यही ताकत है।
\n\nJava में BDD के लिए उपकरण: फ्रेमवर्क चुनना
\n\nJava की दुनिया में BDD के लिए दो मुख्य खिलाड़ी हैं: Cucumber और JBehave। आइए उनकी तुलना करें।
\n\nJava के लिए Cucumber: BDD का राजा
\n\nCucumber सबसे लोकप्रिय फ्रेमवर्क है। यह बॉक्स से बाहर Gherkin का समर्थन करता है, JUnit और TestNG के साथ एकीकृत होता है, और इसका एक बड़ा समुदाय है। यदि आप BDD Java में नए हैं, तो Cucumber से शुरुआत करें।
\n\nJBehave: पुराना, लेकिन विश्वसनीय
\n\nJBehave BDD का "दादा" है। यह कम लोकप्रिय है, लेकिन फिर भी legacy प्रोजेक्ट्स में उपयोग किया जाता है। इसका मुख्य अंतर: स्क्रिप्ट टेक्स्ट फ़ाइलों में लिखी जाती हैं, और चरणों को @Given, @When, @Then एनोटेशन के माध्यम से जोड़ा जाता है।
व्यक्तिगत रूप से, मैं Cucumber की सलाह देता हूं — इसके पास बेहतर दस्तावेज़ीकरण और अधिक उदाहरण हैं। लेकिन यदि आप किसी पुराने प्रोजेक्ट पर काम कर रहे हैं, तो JBehave भी चलेगा।
\n\nJava पर पहला BDD परीक्षण लिखना: चरण-दर-चरण मार्गदर्शिका
\n\nआइए सिद्धांत से अभ्यास की ओर बढ़ें। Cucumber के साथ एक सरल Maven प्रोजेक्ट बनाएं। आपका काम संरचना को समझना है, न कि केवल कोड कॉपी करना।
\n\nचरण 1: निर्भरताएँ जोड़ें
\n\npom.xml में निम्नलिखित निर्भरताएँ जोड़ें:
<dependency>\n <groupId>io.cucumber</groupId>\n <artifactId>cucumber-java</artifactId>\n <version>7.18.0</version>\n <scope>test</scope>\n</dependency>\n<dependency>\n <groupId>io.cucumber</groupId>\n <artifactId>cucumber-junit-platform-engine</artifactId>\n <version>7.18.0</version>\n <scope>test</scope>\n</dependency>\n\n\nचरण 2: feature फ़ाइल बनाएँ
\n\nsrc/test/resources फ़ोल्डर में login.feature फ़ाइल बनाएँ:
Feature: उपयोगकर्ता प्रमाणीकरण\n एक पंजीकृत उपयोगकर्ता के रूप में\n मैं सिस्टम में लॉगिन करना चाहता हूं\n ताकि मैं अपने व्यक्तिगत खाते तक पहुंच सकूं\n\n Scenario: सफल प्रमाणीकरण\n Given उपयोगकर्ता ने लॉगिन पेज खोला है\n When उपयोगकर्ता लॉगिन "te