परिचय: PHP एप्लिकेशन का परीक्षण क्यों करें?
कोड का परीक्षण केवल एक फैशनेबल ट्रेंड नहीं है, बल्कि पेशेवर डेवलपमेंट की एक बुनियादी प्रैक्टिस है। PHP की दुनिया में, जहाँ बड़ी संख्या में प्रोजेक्ट डेटाबेस, बाहरी API और जटिल बिज़नेस लॉजिक के साथ काम करते हैं, कोड की गुणवत्ता सीधे उत्पाद की स्थिरता और सुरक्षा को प्रभावित करती है। परीक्षण के बिना, एक छोटा सा बदलाव भी उस कार्यक्षमता को तोड़ सकता है जो वर्षों से काम कर रही थी।
इस लेख में, हम परीक्षण के तीन प्रमुख स्तरों पर चर्चा करेंगे: unit (यूनिट), integration (इंटीग्रेशन) और e2e (एंड-टू-एंड)। आप जानेंगे कि वे कैसे भिन्न हैं, प्रत्येक का उपयोग कब करना है, और PHP में वास्तविक कोड उदाहरण देखेंगे। चाहे आप Laravel, Symfony का उपयोग करें या शुद्ध PHP में लिखें, ये ज्ञान आपको विश्वसनीय एप्लिकेशन बनाने में मदद करेगा।
Unit-परीक्षण: पृथक घटकों की जाँच
Unit-टेस्ट (यूनिट-टेस्ट) परीक्षण का सबसे निचला और सबसे तेज़ स्तर है। इनका उद्देश्य बाहरी निर्भरताओं (डेटाबेस, फ़ाइल सिस्टम, HTTP-अनुरोध) से पूरी तरह अलग करके किसी एकल विधि या फ़ंक्शन के काम की जाँच करना है।
PHP में unit-परीक्षण के लिए उपकरण
- PHPUnit — डी-फैक्टो मानक। शक्तिशाली, लचीला, अधिकांश फ्रेमवर्क द्वारा समर्थित।
- Pest — अधिक संक्षिप्त सिंटैक्स के साथ एक आधुनिक विकल्प। शुरुआती और पठनीयता को महत्व देने वाली टीमों के लिए आदर्श।
PHPUnit पर उदाहरण
मान लीजिए, हमारे पास छूट की गणना के लिए एक सरल क्लास है:
<?php
class DiscountCalculator
{
public function calculate(float $price, float $percent): float
{
if ($percent < 0 || $percent > 100) {
throw new \\InvalidArgumentException('छूट का प्रतिशत 0 से 100 के बीच होना चाहिए');
}
return $price - ($price * $percent / 100);
}
}
?>
इस क्लास के लिए परीक्षण इस प्रकार होगा:
<?php
use PHPUnit\\Framework\\TestCase;
class DiscountCalculatorTest extends TestCase
{
public function testCalculateWithValidDiscount(): void
{
$calculator = new DiscountCalculator();
$result = $calculator->calculate(1000, 20);
$this->assertEquals(800.0, $result);
}
public function testCalculateWithZeroPercent(): void
{
$calculator = new DiscountCalculator();
$result = $calculator->calculate(500, 0);
$this->assertEquals(500.0, $result);
}
public function testCalculateThrowsExceptionForInvalidPercent(): void
{
$this->expectException(\\InvalidArgumentException::class);
$calculator = new DiscountCalculator();
$calculator->calculate(100, 150);
}
}
?>
Unit-टेस्ट के प्रमुख सिद्धांत:
- एक परीक्षण — एक जाँच (एक assert)।
- परीक्षण एक-दूसरे पर निर्भर नहीं होने चाहिए।
- बाहरी सेवाओं को अलग करने के लिए मॉक (mocks) का उपयोग करें। उदाहरण के लिए, PHPUnit में
createMock()के साथ। - सीमा मामलों को कवर करें: null, खाली स्ट्रिंग, नकारात्मक मान।
Integration-परीक्षण: घटकों के बीच परस्पर क्रिया की जाँच
इंटीग्रेशन टेस्ट जाँचते हैं कि एप्लिकेशन के विभिन्न भाग एक साथ कैसे काम करते हैं: क्लास, डेटाबेस, बाहरी सेवाएँ। Unit-टेस्ट के विपरीत, यहाँ हम वास्तविक (या लगभग वास्तविक) निर्भरताओं का उपयोग करते हैं।
Integration-टेस्ट कब लिखें?
- डेटाबेस (ORM, क्वेरी) के साथ परस्पर क्रिया की जाँच।
- फ़ाइल सिस्टम के साथ काम (फ़ाइल अपलोड/रीड)।
- बाहरी API के साथ परस्पर क्रिया (टेस्ट स्टब के माध्यम से)।
- रिपॉजिटरी और सर्विस लेयर के सही काम की जाँच।
PDO का उपयोग करते हुए PHP पर उदाहरण (बिना फ्रेमवर्क के)
<?php
use PHPUnit\\Framework\\TestCase;
class User
```