PHP में परीक्षण: यूनिट, इंटीग्रेशन, E2E — पूर्ण गाइड

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

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

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

परिचय: PHP में परीक्षण की आवश्यकता क्यों?

PHP में विकास केवल ऐसा कोड लिखना नहीं है जो "काम करता है"। आधुनिक वेब विकास में, एप्लिकेशन की स्थिरता और पूर्वानुमानशीलता सबसे महत्वपूर्ण हो जाती है। परीक्षण के बिना, कोड में कोई भी बदलाव पहले से काम कर रही कार्यक्षमता को तोड़ सकता है, और मैन्युअल रूप से त्रुटियाँ ढूँढना एक अंतहीन "बग शिकार" बन जाता है। यहाँ परीक्षण हमारी सहायता के लिए आता है।

इस लेख में, हम PHP एप्लिकेशन परीक्षण के तीन प्रमुख स्तरों पर चर्चा करेंगे: यूनिट (मॉड्यूलर), इंटीग्रेशन (एकीकरण) और E2E (एंड-टू-एंड)। आप जानेंगे कि वे कैसे भिन्न हैं, किन उपकरणों का उपयोग करना है, और अपने प्रोजेक्ट के लिए एक प्रभावी परीक्षण रणनीति कैसे बनाएँ।



यूनिट-टेस्ट: पिरामिड का आधार

यूनिट-टेस्ट (मॉड्यूलर) परीक्षण का सबसे तेज़ और सबसे अलग-थलग स्तर है। इनका उद्देश्य बाहरी निर्भरताओं: डेटाबेस, फ़ाइल सिस्टम, API से अलग होकर एक अलग "यूनिट" (क्लास, विधि या फ़ंक्शन) के काम की जाँच करना है।



PHP के लिए उपकरण

सबसे लोकप्रिय फ्रेमवर्क PHPUnit है। एक अधिक आधुनिक विकल्प Pest है, जो अधिक संक्षिप्त सिंटैक्स प्रदान करता है।



PHPUnit पर यूनिट-टेस्ट का उदाहरण

मान लीजिए, हमारे पास एक सरल कैलकुलेटर क्लास है:

<?php// src/Calculator.phpclass Calculator{    public function add(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; }}

इसके लिए परीक्षण इस प्रकार होगा:

<?php// tests/Unit/CalculatorTest.phpuse PHPUnit\\Framework\\TestCase;

class CalculatorTest extends TestCase{ private Calculator $calculator;

protected function setUp(): void { $this->calculator = new Calculator(); }

public function testAddReturnsCorrectSum(): void { $result = $this->calculator->add(2, 3); $this->assertEquals(5, $result); }

public function testDivideThrowsExceptionOnZero(): void { $this->expectException(\\InvalidArgumentException::class); $this->calculator->divide(10, 0); }}

यूनिट-टेस्ट के प्रमुख सिद्धांत:

  • अलगाव: सभी बाहरी निर्भरताएँ (DB, API) mock (नकली) या stub (स्टब) से बदल दी जाती हैं।
  • गति: मिलीसेकंड में निष्पादित होते हैं।
  • एक विशिष्ट परिदृश्य की जाँच करते हैं (प्रति परीक्षण एक assert — अच्छा अभ्यास)।

चलाएँ: ./vendor/bin/phpunit tests/Unit



इंटीग्रेशन-टेस्ट: अंतःक्रिया की जाँच

इंटीग्रेशन टेस्ट एक स्तर ऊपर जाते हैं। वे जाँचते हैं कि सिस्टम के विभिन्न भाग एक साथ कैसे काम करते हैं: डेटाबेस के साथ क्लास, मॉडल के साथ कंट्रोलर, बाहरी API (वास्तविक या सिम्युलेटेड) के साथ सर्विस।



इंटीग्रेशन-टेस्ट कब आवश्यक हैं?

  • SQL क्वेरी की सटीकता की जाँच।
  • एप्लिकेशन परतों (जैसे, Repository + Entity) के बीच संबंध का सत्यापन।
  • मिडलवेयर या इवेंट का परीक्षण।


उदाहरण: वास्तविक DB के साथ रिपॉजिटरी का परीक्षण

इंटीग्रेशन टेस्ट के लिए अक्सर टेस्ट डेटाबेस (मेमोरी में SQLite या PostgreSQL में ट्रांजेक्शन) का उपयोग किया जाता है। आइए PHPUnit और DB रीसेट करने के लिए ट्रेट के साथ एक उदाहरण देखें:

<?php// tests/Integration/UserRepositoryTest.phpuse PHPUnit\\Framework\\TestCase;

class UserRepositoryTest extends TestCase{ private PDO $pdo; private UserRepository $repository;

protected function setUp(): void { // अलगाव के लिए in-memory SQLite बनाएँ $this->pdo = new PDO('sqlite::memory:'); $this->pdo->exec('CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)');

ब्लॉग

पुस्तक अनुशंसाएँ