क्यों "पहले परीक्षण" आत्म-पीड़न नहीं, बल्कि एक महाशक्ति है
\n\nकल्पना करें: आप कोड लिख रहे हैं, सब कुछ काम कर रहा है। आप खुश हैं। एक महीने बाद आप प्रोजेक्ट पर वापस आते हैं, एक लाइन बदलते हैं — और सब कुछ टूट जाता है। परिचित लगता है? उन डेवलपर्स के क्लब में आपका स्वागत है जो परीक्षण नहीं लिखते। अब एक और वास्तविकता की कल्पना करें: आप कोड बदलते हैं, परीक्षण चलाते हैं — और 10 सेकंड में जान जाते हैं कि कुछ भी नहीं टूटा। यह जादू नहीं है, यह TDD (Test-Driven Development) है — परीक्षण-संचालित विकास।
\n\nइस लेख में हम C# के उदाहरण पर TDD को समझेंगे। उबाऊ सिद्धांत के बिना। केवल अभ्यास, कोड और वास्तविक मामले। अगर आप सोचते हैं कि TDD केवल "शुद्ध आर्किटेक्ट" या "एंटरप्राइज़ राक्षसों" के लिए है — तो आप हैरान होंगे। यह एक उपकरण है जो आपके कोड और आपकी नसों को बचाएगा।
\n\nTDD क्या है और Red-Green-Refactor कैसे काम करता है
\n\nTDD परीक्षण के बारे में नहीं है। यह डिज़ाइन के बारे में है। आप कोड के बाद परीक्षण नहीं लिखते, बल्कि इसके विपरीत: पहले परीक्षण, फिर न्यूनतम कोड जो उसे पास करे, और उसके बाद ही रिफैक्टरिंग। इस चक्र को Red-Green-Refactor कहा जाता है:
\n\n- \n
- Red — हम एक परीक्षण लिखते हैं जो जानबूझकर विफल होगा (लाल)। \n
- Green — हम न्यूनतम कोड लिखते हैं ताकि परीक्षण पास हो (हरा)। \n
- Refactor — हम कोड में सुधार करते हैं, उसके व्यवहार को बदले बिना। \n
अजीब लगता है? आइए एक उदाहरण देखें। मान लीजिए, हमें जोड़ विधि वाले एक कैलकुलेटर की आवश्यकता है। आमतौर पर हम क्लास लिखते हैं, फिर परीक्षण। TDD में — इसके विपरीत।
\n\nचरण 1: Red — एक परीक्षण लिखें जो विफल होगा
\n\nusing NUnit.Framework;\n\n[TestFixture]\npublic class CalculatorTests\n{\n [Test]\n public void Add_ShouldReturnSumOfTwoNumbers()\n {\n // Arrange\n var calculator = new Calculator();\n \n // Act\n var result = calculator.Add(2, 3);\n \n // Assert\n Assert.AreEqual(5, result);\n }\n}\n\nचलाएँ — परीक्षण विफल होता है, क्योंकि Calculator क्लास मौजूद नहीं है। लाल — यह सामान्य है। अब हमारा काम हरा बनाना है।
\n\nचरण 2: Green — परीक्षण पास करने के लिए न्यूनतम कोड
\n\npublic class Calculator\n{\n public int Add(int a, int b)\n {\n return a + b; // न्यूनतम कार्यान्वयन\n }\n}\n\nपरीक्षण हरा है। वाह। लेकिन कोड अभी बदसूरत है। चरण 3 पर चलते हैं।
\n\nचरण 3: Refactor — सुधारें, लेकिन तोड़ें नहीं
\n\nइस चरण पर, हम जाँच, अपवाद प्रबंधन जोड़ सकते हैं या आर्किटेक्चर बदल सकते हैं। मुख्य बात यह है कि परीक्षण हरे रहने चाहिए।
\n\npublic class Calculator\n{\n public int Add(int a, int b)\n {\n if (a < 0 || b < 0)\n throw new ArgumentException("Only positive numbers allowed");\n return a + b;\n }\n}\n\nपरीक्षण विफल होगा? हाँ। तो, परीक्षण को अपडेट करना या तर्क बदलना होगा। TDD में रिफैक्टरिंग हमेशा परीक्षणों के साथ एक संवाद है।
\n\nC# में TDD के लिए फ्रेमवर्क कैसे चुनें: NUnit बनाम xUnit
\n\nC# में तीन लोकप्रिय फ्रेमवर्क हैं: NUnit, xUnit और MSTest। हम पहले दो पर विचार करेंगे, क्योंकि वे सबसे लचीले हैं।
\n\n| मानदंड | \nNUnit | \nxUnit | \n
|---|---|---|
| विशेषताएँ | \n[Test], [SetUp] | \n[Fact], [Theory] | \n
| पैरामीटरीकरण | \n[TestCase] | \n[InlineData] | \n