PHP में परीक्षण: फ्रेमवर्क और टूल
\n\nकोड की गुणवत्ता एक सफल वेब प्रोजेक्ट का आधार है। PHP डेवलपर्स के लिए, परीक्षण एक विकल्प नहीं रह गया है, बल्कि विकास का एक अनिवार्य चरण बन गया है। इस लेख में, हम तीन प्रमुख टूल का विश्लेषण करेंगे: PHPUnit (उद्योग मानक), Pest (आधुनिक न्यूनतमवाद) और Codeception (एकीकरण परीक्षण)। आप सीखेंगे कि यूनिट-टेस्ट कैसे लिखें, मॉक-ऑब्जेक्ट के साथ कैसे काम करें और PHP-प्रोजेक्ट में TDD कैसे लागू करें।
\n\n1. PHPUnit — PHP परीक्षण की नींव
\n\nPHPUnit PHP के मॉड्यूलर परीक्षण के लिए डी-फैक्टो मानक है। यह Symfony, Laravel और अन्य लोकप्रिय फ्रेमवर्क का हिस्सा है।
\n\nस्थापना और मूल परीक्षण
\ncomposer require --dev phpunit/phpunit\n\nकैलकुलेटर क्लास के लिए एक सरल परीक्षण का उदाहरण:
\n// src/Calculator.php\nclass Calculator {\n public function add($a, $b) {\n return $a + $b;\n }\n}\n\n// tests/CalculatorTest.php\nuse PHPUnit\\Framework\\TestCase;\n\nclass CalculatorTest extends TestCase {\n public function testAddition() {\n $calc = new Calculator();\n $this->assertEquals(4, $calc->add(2, 2));\n }\n}\n\nमॉक-ऑब्जेक्ट के साथ काम करना
\nPHPUnit स्टब (मॉक) बनाने के लिए एक अंतर्निहित तंत्र प्रदान करता है:
\npublic function testUserRepository() {\n $mockRepo = $this->createMock(UserRepository::class);\n $mockRepo->method('findById')\n ->willReturn(new User(1, 'Alice'));\n\n $service = new UserService($mockRepo);\n $result = $service->getUser(1);\n $this->assertEquals('Alice', $result->getName());\n}\n\n2. Pest — परीक्षणों के लिए सुरुचिपूर्ण सिंटैक्स
\n\nPest PHPUnit के ऊपर एक रैपर है, जो अधिक संक्षिप्त और पढ़ने योग्य सिंटैक्स प्रदान करता है। यह उन प्रोजेक्टों के लिए आदर्श है जहाँ परीक्षण लिखने की गति महत्वपूर्ण है।
\n\nस्थापना और उदाहरण
\ncomposer require --dev pestphp/pest\n\nPHPUnit से तुलना करें: Pest में वही परीक्षण इस प्रकार दिखता है:
\n// tests/CalculatorTest.php\nit('calculates addition', function () {\n $calc = new Calculator();\n expect($calc->add(2, 2))->toBe(4);\n});\n\nउन्नत क्षमताएँ
\n- \n
- Higher Order Tests — बिना नेस्टिंग के कॉल चेन \n
- Architecture Testing — क्लास संरचना की जाँच \n
- Snapshot Testing — संदर्भ डेटा से तुलना \n
3. Codeception — एकीकरण और कार्यात्मक परीक्षण के लिए
\n\nCodeception यूनिट-, कार्यात्मक और स्वीकृति परीक्षणों को एक फ्रेमवर्क में जोड़ता है। यह Selenium, Symfony, Laravel, Yii और यहाँ तक कि WordPress का भी समर्थन करता है।
\n\nपरीक्षण संरचना
\ncodecept generate:cest acceptance LoginCest\n\nLaravel के लिए कार्यात्मक परीक्षण का उदाहरण:
\n// tests/functional/UserCest.php\nclass UserCest {\n public function testLogin(FunctionalTester $I) {\n $I->amOnPage('/login');\n $I->fillField('email', 'user@example.com');\n $I->fillField('password', 'secret');\n $I->click('Login');\n $I->see('Dashboard');\n }\n}\n\n4. अतिरिक्त टूल
\n\n- \n
- Mockery — मॉक-ऑब्जेक्ट के लिए लचीली लाइब्रेरी (PHPUnit के अंतर्निहित मॉक का विकल्प) \n
- PHPStan / Psalm — स्थैतिक विश्लेषण, जो परीक्षण चलाने से पहले त्रुटियों का पता लगाता है \n
- Infection — म्यूटेशन परीक्षण: स्वयं परीक्षणों की गुणवत्ता की जाँच करता है \n
- PHP CodeSniffer — PSR-12 अनुपालन की जाँच \n
5. व्यावहारिक उदाहरण: API-सेवा के लिए TDD
\n\nहम ऑर्डर सेवा के लिए एक सरल TDD (Test-Driven Development) चक्र लागू करते हैं:
\n\nचरण 1. परीक्षण लिखें
\n// tests/OrderServiceTest.php\npublic function testCrea