PHP में परीक्षण: फ्रेमवर्क और टूल का अवलोकन (PHPUnit, Pest, Codeception)

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

PHP में परीक्षण: फ्रेमवर्क और टूल

\n\n

कोड की गुणवत्ता एक सफल वेब प्रोजेक्ट का आधार है। PHP डेवलपर्स के लिए, परीक्षण एक विकल्प नहीं रह गया है, बल्कि विकास का एक अनिवार्य चरण बन गया है। इस लेख में, हम तीन प्रमुख टूल का विश्लेषण करेंगे: PHPUnit (उद्योग मानक), Pest (आधुनिक न्यूनतमवाद) और Codeception (एकीकरण परीक्षण)। आप सीखेंगे कि यूनिट-टेस्ट कैसे लिखें, मॉक-ऑब्जेक्ट के साथ कैसे काम करें और PHP-प्रोजेक्ट में TDD कैसे लागू करें।

\n\n

1. PHPUnit — PHP परीक्षण की नींव

\n\n

PHPUnit PHP के मॉड्यूलर परीक्षण के लिए डी-फैक्टो मानक है। यह Symfony, Laravel और अन्य लोकप्रिय फ्रेमवर्क का हिस्सा है।

\n\n

स्थापना और मूल परीक्षण

\n
composer 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

मॉक-ऑब्जेक्ट के साथ काम करना

\n

PHPUnit स्टब (मॉक) बनाने के लिए एक अंतर्निहित तंत्र प्रदान करता है:

\n
public 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\n

2. Pest — परीक्षणों के लिए सुरुचिपूर्ण सिंटैक्स

\n\n

Pest PHPUnit के ऊपर एक रैपर है, जो अधिक संक्षिप्त और पढ़ने योग्य सिंटैक्स प्रदान करता है। यह उन प्रोजेक्टों के लिए आदर्श है जहाँ परीक्षण लिखने की गति महत्वपूर्ण है।

\n\n

स्थापना और उदाहरण

\n
composer require --dev pestphp/pest
\n\n

PHPUnit से तुलना करें: 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
\n\n

3. Codeception — एकीकरण और कार्यात्मक परीक्षण के लिए

\n\n

Codeception यूनिट-, कार्यात्मक और स्वीकृति परीक्षणों को एक फ्रेमवर्क में जोड़ता है। यह Selenium, Symfony, Laravel, Yii और यहाँ तक कि WordPress का भी समर्थन करता है।

\n\n

परीक्षण संरचना

\n
codecept generate:cest acceptance LoginCest
\n\n

Laravel के लिए कार्यात्मक परीक्षण का उदाहरण:

\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\n

4. अतिरिक्त टूल

\n\n
    \n
  • Mockery — मॉक-ऑब्जेक्ट के लिए लचीली लाइब्रेरी (PHPUnit के अंतर्निहित मॉक का विकल्प)
  • \n
  • PHPStan / Psalm — स्थैतिक विश्लेषण, जो परीक्षण चलाने से पहले त्रुटियों का पता लगाता है
  • \n
  • Infection — म्यूटेशन परीक्षण: स्वयं परीक्षणों की गुणवत्ता की जाँच करता है
  • \n
  • PHP CodeSniffer — PSR-12 अनुपालन की जाँच
  • \n
\n\n

5. व्यावहारिक उदाहरण: API-सेवा के लिए TDD

\n\n

हम ऑर्डर सेवा के लिए एक सरल TDD (Test-Driven Development) चक्र लागू करते हैं:

\n\n

चरण 1. परीक्षण लिखें

\n
// tests/OrderServiceTest.php\npublic function testCrea                    

अनुशंसाएँ