PHP में परीक्षण: फ्रेमवर्क और उपकरण
गुणवत्तापूर्ण परीक्षण एक विश्वसनीय वेब एप्लिकेशन की नींव है। PHP इकोसिस्टम में उपकरणों का एक शक्तिशाली सेट विकसित हुआ है, जो सभी स्तरों को कवर करता है: मॉड्यूलर (यूनिट) परीक्षण से लेकर स्वीकृति (एक्सेप्टेंस) परीक्षण तक। इस लेख में, हम मुख्य फ्रेमवर्क और लाइब्रेरीज़ पर चर्चा करेंगे जो आपको स्वच्छ, परीक्षण योग्य कोड लिखने में मदद करेंगे।
1. PHPUnit — डी-फैक्टो मानक
PHPUnit PHP में मॉड्यूलर परीक्षण के लिए सबसे लोकप्रिय फ्रेमवर्क बना हुआ है। यह Symfony, Laravel और कई अन्य प्रोजेक्ट्स का हिस्सा है। मुख्य विशेषताएं:
- असर्ट (assertions) का समर्थन — सरल
assertEqualsसे लेकर जटिलassertJsonStructureतक। - डेटा तैयार करने और साफ करने के लिए फिक्स्चर (
setUp(),tearDown())। - HTML, XML, Clover प्रारूपों में रिपोर्ट जनरेशन।
- CI/CD (GitHub Actions, GitLab CI, Jenkins) के साथ एकीकरण।
<?phpuse PHPUnit\\Framework\\TestCase;
class CalculatorTest extends TestCase{ public function testAddition() { $calc = new Calculator(); $this->assertEquals(4, $calc->add(2, 2)); }
public function testDivisionByZero() { $this->expectException(\\DivisionByZeroError::class); $calc = new Calculator(); $calc->divide(10, 0); }}2. Mockery — लचीला स्टब निर्माण
Mockery PHPUnit की मॉक-ऑब्जेक्ट बनाने की क्षमताओं का विस्तार करता है। यह तब उपयोगी होता है जब किसी जटिल सेवा या डेटाबेस को बदलने की आवश्यकता होती है।
- आंशिक मॉकिंग (partial mocks) का समर्थन।
- मेथड कॉल के क्रम की जाँच (
shouldReceive)। - मैजिक मेथड्स (
__call,__get) के साथ कार्य।
<?phpuse Mockery as m;
class OrderProcessorTest extends TestCase{ public function testProcess() { $gateway = m::mock(PaymentGateway::class); $gateway->shouldReceive('charge') ->once() ->with(100.0) ->andReturn(true);
$processor = new OrderProcessor($gateway); $this->assertTrue($processor->process(100.0)); }
protected function tearDown(): void { m::close(); }}3. Codeception — सब कुछ एक में
Codeception मॉड्यूलर, कार्यात्मक और स्वीकृति परीक्षणों को एक ही सिंटैक्स में जोड़ता है। यह विशेष रूप से वेब प्रोजेक्ट्स में लोकप्रिय है जहाँ फॉर्म, AJAX अनुरोध और डेटाबेस का परीक्षण करने की आवश्यकता होती है।
- PHPBrowser, Selenium, Laravel, Symfony के साथ काम करने के लिए मॉड्यूल।
- CLI के माध्यम से परीक्षण जनरेशन:
codecept generate:test। - Gherkin के माध्यम से BDD (Behavior-Driven Development) का समर्थन।
<?php// acceptance.suite.ymlactor: AcceptanceTestermodules: enabled: - WebDriver: url: 'http://localhost' browser: chrome - Laravel5: environment_file: .env.testing
// tests/acceptance/LoginCept.php$I = new AcceptanceTester($scenario);$I->wantTo('see that login form works');$I->amOnPage('/login');$I->fillField('email', 'user@example.com');$I->fillField('password', 'secret');$I->click('Login');$I->see('Dashboard');4. Pest — न्यूनतम सिंटैक्स
Pest, JavaScript लाइब्रेरी Jest से प्रेरित संक्षिप्त सिंटैक्स के साथ PHPUnit का एक आधुनिक विकल्प है। यह उन लोगों के लिए आदर्श है जो परीक्षणों की पठनीयता को महत्व देते हैं।
- स्वचालित निर्भरता समाधान।
- असर्ट की श्रृंखला:
expect($result)->toBeTrue()। - समानांतर निष्पादन के लिए अंतर्निहित समर्थन।
<?phpuse function Pest\\Faker\\faker;
test('it creates a user', function () { $user = User::factory()->create([ 'name' => faker()->name, 'email' => faker()->email, ]);
expect($u