परिचय: PHP में परीक्षण की आवश्यकता क्यों?
\n\nपरीक्षण के बिना PHP विकास करना ऐसा है जैसे बिना नींव के घर बनाना। देर-सबेर एप्लिकेशन क्रैश हो जाएगा, और उपयोगकर्ता "सफेद मौत की स्क्रीन" देखेंगे। कोड परीक्षण कोई विलासिता नहीं, बल्कि किसी भी गंभीर प्रोजेक्ट के लिए आवश्यकता है। यह निम्नलिखित में सक्षम बनाता है:
\n- \n
- प्रारंभिक चरणों में त्रुटियों का पता लगाना — कोड प्रोडक्शन में जाने से पहले। \n
- रीफैक्टरिंग को सरल बनाना — आप आर्किटेक्चर को सुरक्षित रूप से बदल सकते हैं, यह जानते हुए कि परीक्षण प्रतिगमन को पकड़ लेंगे। \n
- स्व-दस्तावेजीकरण कोड बनाना — परीक्षण सिस्टम के काम करने के तरीके की जीवंत दस्तावेज़ीकरण के रूप में कार्य करते हैं। \n
- टीम का आत्मविश्वास बढ़ाना — प्रत्येक नया कमिट स्वचालित जांच से गुजरता है। \n
PHP में परीक्षण के तीन मुख्य स्तर हैं: Unit (मॉड्यूलर), Integration (एकीकरण) और E2E (एंड-टू-एंड)। इस लेख में, हम सरल assert से लेकर पूर्ण ब्राउज़र परीक्षणों तक, व्यावहारिक उदाहरणों के साथ प्रत्येक का विश्लेषण करेंगे।
\n\n1. Unit-परीक्षण: एप्लिकेशन के "बिल्डिंग ब्लॉक्स" का परीक्षण
\n\nUnit-परीक्षण क्या है?
\nUnit-परीक्षण कोड के एक छोटे ब्लॉक के काम की जाँच करता है — आमतौर पर एक विधि या फ़ंक्शन — बाहरी निर्भरताओं (डेटाबेस, API, फ़ाइल सिस्टम) से पूर्ण अलगाव में।
\n\nPHP के लिए उपकरण
\n- \n
- PHPUnit — डी-फैक्टो मानक। Laravel, Symfony और कई CMS में उपयोग किया जाता है। \n
- Pest — PHPUnit के ऊपर निर्मित अधिक संक्षिप्त सिंटैक्स वाला आधुनिक विकल्प। \n
उदाहरण: डिस्काउंट कैलकुलेटर का परीक्षण
\nमान लीजिए हमारे पास एक सरल क्लास DiscountCalculator है:
<?php\n\nclass DiscountCalculator\n{\n public function calculate(float $price, float $percent): float\n {\n if ($percent < 0 || $percent > 100) {\n throw new \\InvalidArgumentException('प्रतिशत 0 से 100 के बीच होना चाहिए');\n }\n return $price - ($price * $percent / 100);\n }\n}\n\n\nअब PHPUnit का उपयोग करके एक Unit-परीक्षण लिखते हैं:
\n\n<?php\n\nuse PHPUnit\\Framework\\TestCase;\n\nclass DiscountCalculatorTest extends TestCase\n{\n private DiscountCalculator $calculator;\n\n protected function setUp(): void\n {\n $this->calculator = new DiscountCalculator();\n }\n\n public function testCalculateWithZeroPercent(): void\n {\n $result = $this->calculator->calculate(100, 0);\n $this->assertEquals(100, $result);\n }\n\n public function testCalculateWithFiftyPercent(): void\n {\n $result = $this->calculator->calculate(200, 50);\n $this->assertEquals(100, $result);\n }\n\n public function testCalculateThrowsExceptionOnInvalidPercent(): void\n {\n $this->expectException(\\InvalidArgumentException::class);\n $this->calculator->calculate(100, 150);\n }\n}\n\n\nमुख्य बिंदु:
\n- \n
- प्रत्येक विधि केवल एक परिदृश्य का परीक्षण करती है। \n
- हम DB या बाहरी सेवाओं तक नहीं पहुँचते हैं। \n
- सामान्य ऑब्जेक्ट्स को आरंभ करने के लिए
setUp()का उपयोग करें। \n
Unit-परीक्षण की सर्वोत्तम प्रथाएँ
\n- \n
- FIRST सिद्धांत का पालन करें: Fast, Isolated, Repeatable, Self-validating, Timely। \n
- परीक्षणों का नाम "test_क्रिया_अपेक्षितपरिणाम" के रूप में रखें। \n
- परीक्षणों में तर्क से बचें — कोई if/switch/लूप नहीं। \n
2. एकीकरण परीक्षण: घटकों के बीच परस्पर क्रिया की जाँच
\n\nUnit से अंतर क्या है?
\nएकीकरण परीक्षण जाँचते हैं कि सिस्टम के विभिन्न भाग एक साथ कैसे काम करते हैं। उदाहरण के लिए, आपकी सेवा वास्तविक डेटाबेस, कैश या बाहरी API के साथ कैसे इंटरैक्ट करती है।
\n\nउदाहरण: DB के साथ रिपॉजिटरी का परीक्षण (Laravel + SQLite)
\nमान लीजिए हमारे पास ए