PHPUnit क्या है और इसकी ज़रूरत क्यों है?
PHPUnit PHP भाषा में यूनिट टेस्टिंग (unit testing) के लिए एक फ्रेमवर्क है। यह xUnit परिवार का हिस्सा है और डेवलपर्स को प्रोग्राम के अलग-अलग घटकों (क्लास, मेथड, फंक्शन) की कार्यक्षमता को ऑटोमेटेड तरीके से जांचने के लिए टूल्स प्रदान करता है।
PHPUnit की ज़रूरत क्यों है?
- जल्दी बग पकड़ना: कोड में हर बदलाव के बाद टेस्ट चलते हैं, जिससे रिग्रेशन तुरंत पकड़ में आ जाते हैं।
- कोड डॉक्यूमेंटेशन: अच्छी तरह से लिखे गए टेस्ट लाइव डॉक्यूमेंटेशन का काम करते हैं, जो बताते हैं कि किसी मेथड को कैसे काम करना चाहिए।
- बिना डर के रिफैक्टरिंग: आप आत्मविश्वास से कोड को दोबारा लिख सकते हैं, क्योंकि टेस्ट यह सुनिश्चित करेंगे कि मौजूदा फंक्शनैलिटी न टूटे।
- TDD (Test-Driven Development) का समर्थन: टेस्ट-ड्रिवन डेवलपमेंट एक ऐसी मेथडोलॉजी है जिसमें पहले टेस्ट लिखा जाता है, फिर उसे पास करने के लिए न्यूनतम कोड लिखा जाता है।
- CI/CD के साथ इंटीग्रेशन: PHPUnit को GitHub Actions, GitLab CI, Jenkins जैसे कंटीन्यूअस इंटीग्रेशन पाइपलाइनों में आसानी से जोड़ा जा सकता है।
PHPUnit मॉक ऑब्जेक्ट्स, फिक्स्चर (टेस्ट के लिए डेटा सेट), कोड कवरेज और कई अन्य एडवांस्ड फीचर्स को सपोर्ट करता है।
PHPUnit इंस्टॉलेशन
PHPUnit को Composer के ज़रिए इंस्टॉल किया जाता है, जो PHP के लिए डिपेंडेंसी मैनेजर है। अगर आपके पास Composer नहीं है, तो इसे आधिकारिक साइट getcomposer.org से इंस्टॉल करें।
ग्लोबल इंस्टॉलेशन (CLI के लिए सुझाव)
composer global require phpunit/phpunit
इसके बाद सुनिश्चित करें कि Composer के ग्लोबल पैकेज की डायरेक्टरी PATH में जुड़ी हुई है। इंस्टॉलेशन चेक करें:
phpunit --version
लोकल इंस्टॉलेशन (प्रोजेक्ट के अंदर)
composer require --dev phpunit/phpunit
इसके बाद PHPUnit vendor/bin/phpunit के ज़रिए उपलब्ध होगा।
किसी विशिष्ट वर्ज़न का इंस्टॉलेशन
composer require --dev phpunit/phpunit:^10.0
ज़रूरी: PHPUnit का वर्ज़न आपके प्रोजेक्ट के PHP वर्ज़न से मेल खाना चाहिए। उदाहरण के लिए, PHPUnit 10 के लिए PHP 8.1 या उससे ऊपर का वर्ज़न चाहिए।
कोड उदाहरण के साथ त्वरित शुरुआत
चलिए एक सरल Calculator.php क्लास बनाते हैं और उसके लिए टेस्ट लिखते हैं।
चरण 1. टेस्ट करने के लिए क्लास बनाएँ
<?php
// src/Calculator.php
class Calculator
{
public function add(int $a, int $b): int
{
return $a + $b;
}
public function subtract(int $a, int $b): int
{
return $a - $b;
}
public function multiply(int $a, int $b): int
{
return $a * $b;
}
public function divide(int $a, int $b): float
{
if ($b === 0) {
throw new \InvalidArgumentException("Division by zero");
}
return $a / $b;
}
}
चरण 2. टेस्ट क्लास बनाएँ
<?php
// tests/CalculatorTest.php
use PHPUnit\Framework\TestCase;
class CalculatorTest extends TestCase
{
private Calculator $calculator;
protected function setUp(): void
{
$this->calculator = new Calculator();
}
public function testAdd(): void
{
$result = $this->calculator->add(2, 3);
$this->assertEquals(5, $result);
}
public function testSubtract(): void
{
$result = $this->calculator->subtract(10, 4);
$this->assertEquals(6, $result);
}
public function testMultiply(): void
{
$result = $this->calculator->multiply(3, 4);
$this->assertEquals(12, $result);
}
public function testDivide(): void
{
$result = $this->calculator->divide(10, 2);
$this->assertEquals(5.0, $result);
}
public function testDivideByZero(): void
{
$this->expectException(\InvalidArgumentException: