Mockery PHP: पूर्ण गाइड, उदाहरण और ट्यूटोरियल

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

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

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

Mockery PHP: पूर्ण गाइड, उदाहरण और ट्यूटोरियल

1. Mockery क्या है और इसकी आवश्यकता क्यों है?

Mockery PHP के लिए एक शक्तिशाली और लचीली मॉक ऑब्जेक्ट (mock objects) लाइब्रेरी है। इसका उपयोग यूनिट टेस्टिंग (unit testing) में किया जाता है, जिससे डेवलपर्स अपने कोड को डिपेंडेंसी से अलग करके टेस्ट कर सकते हैं। रियल ऑब्जेक्ट (जैसे डेटाबेस कनेक्शन, API क्लाइंट या फ़ाइल सिस्टम) का उपयोग करने के बजाय, आप उनके "नकली" (mocks) वर्जन बनाते हैं जो असली की तरह व्यवहार करते हैं। इससे टेस्ट तेज़, भरोसेमंद और बाहरी कारकों से स्वतंत्र हो जाते हैं।

इसकी आवश्यकता क्यों है? मान लीजिए आप OrderProcessor क्लास को टेस्ट कर रहे हैं जो ऑर्डर होने पर email भेजता है। अगर आप रियल Mailer का उपयोग करेंगे, तो आपका टेस्ट धीमा होगा, SMTP सर्वर पर निर्भर होगा, और गलती से रियल यूज़र्स को ईमेल भेज सकता है। Mockery की मदद से आप एक "फर्जी" Mailer बनाते हैं जो सिर्फ यह चेक करता है कि send() मेथड सही आर्गुमेंट्स के साथ कॉल हुआ या नहीं। इससे आप OrderProcessor की लॉजिक पर फोकस कर सकते हैं, इन्फ्रास्ट्रक्चर पर नहीं।

Mockery सिर्फ ऑब्जेक्ट बदलने का टूल नहीं है। यह एक समृद्ध API प्रदान करता है जिससे आप एक्सपेक्टेशन (expectations) सेट कर सकते हैं: आप बता सकते हैं कि कोई मेथड कितनी बार कॉल होना चाहिए, किन आर्गुमेंट्स के साथ, किस क्रम में, और उसे क्या रिटर्न करना चाहिए। इससे टेस्ट न केवल आइसोलेटेड होते हैं, बल्कि सेल्फ-डॉक्यूमेंटिंग भी बन जाते हैं, क्योंकि एक्सपेक्टेशन स्पष्ट रूप से ऑब्जेक्ट्स के बीच इंटरैक्शन को बताते हैं।

2. Mockery की इंस्टॉलेशन

Mockery को Composer के माध्यम से इंस्टॉल किया जाता है, जो PHP का स्टैंडर्ड पैकेज मैनेजर है। इसे डेवलपमेंट डिपेंडेंसी (require-dev) के रूप में इंस्टॉल करने की सलाह दी जाती है, क्योंकि प्रोडक्शन में इसकी ज़रूरत नहीं होती।

composer require --dev mockery/mockery

इंस्टॉलेशन के बाद, सुनिश्चित करें कि आपकी composer.json फ़ाइल में require-dev सेक्शन में यह एंट्री हो:

{
    "require-dev": {
        "mockery/mockery": "^1.6"
    }
}

अगर आप PHPUnit का उपयोग करते हैं, तो Mockery \Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration ट्रेट के ज़रिए "आउट ऑफ़ द बॉक्स" इंटीग्रेट हो जाता है।

3. Mockery के साथ त्वरित शुरुआत

आइए एक सरल टेस्ट बनाते हैं जो Mockery की बेसिक फंक्शनैलिटी दिखाता है। मान लीजिए हमारे पास Calculator क्लास है जो Logger सर्विस पर निर्भर करता है।

<?php
// उदाहरण के लिए क्लासेस
interface Logger {
    public function log(string $message): void;
}

class Calculator {
    private Logger $logger;

    public function __construct(Logger $logger) {
        $this->logger = $logger;
    }

    public function add(int $a, int $b): int {
        $result = $a + $b;
        $this->logger->log("Adding $a and $b, result: $result");
        return $result;
    }
}

// Mockery के साथ टेस्ट
use PHPUnit\Framework\TestCase;
use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration;

class CalculatorTest extends TestCase {
    use MockeryPHPUnitIntegration;

    public function testAddLogsCorrectly(): void {
        // 1. Logger के लिए मॉक बनाएं
        $loggerMock = Mockery::mock(Logger::class);

        // 2. एक्सपेक्टेशन सेट करें: log() मेथड को 1 बार कॉल होना चाहिए
        //    एक विशिष्ट मैसेज के साथ
        $loggerMock->shouldReceive('log')
            ->once()
            ->with('Adding 2 and 3, result: 5');

        // 3. मॉक के साथ टेस्ट किए जाने वाला ऑब्जेक्ट बनाएं
        $calculator = new Calculator($loggerMock);

        // 4.                    

अनुशंसाएँ