Skill

Symfony তে টেস্টিং

সিম্ফনি (Symfony) - Web Development

276

Symfony একটি শক্তিশালী PHP ফ্রেমওয়ার্ক, যা অ্যাপ্লিকেশন ডেভেলপমেন্টের সময় টেস্টিংকে সহজ এবং কার্যকরী করে তোলে। Symfony টেস্টিং সিস্টেম বিভিন্ন ধরনের টেস্ট (ইউনিট টেস্ট, ফাংশনাল টেস্ট, ইন্টিগ্রেশন টেস্ট) সমর্থন করে, এবং এটি PHPUnit টেস্টিং ফ্রেমওয়ার্কের উপর ভিত্তি করে কাজ করে।

এখানে Symfony তে টেস্টিং সম্পর্কিত মৌলিক ধারণা এবং ব্যবহারযোগ্য টুলস নিয়ে আলোচনা করা হবে।


Symfony তে টেস্টিং এর ধারণা

Symfony অ্যাপ্লিকেশন ডেভেলপমেন্টে টেস্টিং গুরুত্বপূর্ণ, কারণ এটি আপনার কোডের গুণগত মান বজায় রাখে এবং ভবিষ্যতে কোনো পরিবর্তন বা আপডেট করলে বাগ প্রতিরোধ করতে সাহায্য করে। Symfony তিনটি প্রধান ধরনের টেস্টিং সাপোর্ট করে:

  1. ইউনিট টেস্ট (Unit Testing):
    এটি একটি ছোট কোড ইউনিটের পরীক্ষা, যেমন একটি ফাংশন বা ক্লাস। এটি দ্রুত এবং নির্দিষ্ট কাজের ফলাফল যাচাই করে।
  2. ফাংশনাল টেস্ট (Functional Testing):
    এটি একটি বা একাধিক ইউনিটের পরীক্ষা, যেখানে সার্ভিস বা কন্ট্রোলারের মাধ্যমে পূর্ণ প্রক্রিয়া টেস্ট করা হয়।
  3. ইন্টিগ্রেশন টেস্ট (Integration Testing):
    এতে অ্যাপ্লিকেশনের একাধিক কম্পোনেন্ট একসাথে কাজ করার সময় তাদের সমন্বয় পরীক্ষা করা হয়।

Symfony তে PHPUnit ব্যবহার

PHPUnit Symfony-তে টেস্টিং করার জন্য ডিফল্ট ফ্রেমওয়ার্ক, এবং Symfony এর সাথে এটি একত্রিত হওয়ার মাধ্যমে কোড টেস্ট করা সহজ হয়।

1. PHPUnit ইনস্টলেশন:

Symfony প্রকল্পে PHPUnit ইনস্টল করতে নিম্নলিখিত কমান্ড ব্যবহার করতে পারেন:

composer require --dev phpunit/phpunit

2. PHPUnit কনফিগারেশন:

PHPUnit কনফিগারেশন ফাইলটি phpunit.xml.dist ফাইলের মাধ্যমে কনফিগার করা হয়, যা প্রকল্পের রুট ডিরেক্টরিতে থাকে। এটি ডিফল্টভাবে Symfony ইনস্টলেশন থেকে পাওয়া যায়।

3. PHPUnit ব্যবহার:

PHPUnit ইনস্টল করা হলে, আপনি টেস্ট ক্লাস তৈরি করতে পারেন এবং টেস্ট চালাতে পারেন:

php bin/phpunit

এই কমান্ডটি সমস্ত টেস্ট রান করবে এবং ফলাফল প্রদর্শন করবে।


Symfony তে টেস্টিং এর জন্য কন্ট্রোলার টেস্টিং

Symfony তে কন্ট্রোলারের ফাংশনাল টেস্টিং করতে WebTestCase ব্যবহার করা হয়। এটি Symfony অ্যাপ্লিকেশন এর HTTP রিকোয়েস্ট এবং রেসপন্সের পরীক্ষা করে।

কন্ট্রোলার টেস্ট উদাহরণ

// src/Controller/HomeController.php
namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;

class HomeController extends AbstractController
{
    public function index(): Response
    {
        return $this->render('home/index.html.twig');
    }
}

এখন, এই কন্ট্রোলারের টেস্ট করতে:

// tests/Controller/HomeControllerTest.php
namespace App\Tests\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class HomeControllerTest extends WebTestCase
{
    public function testIndex(): void
    {
        // ব্রাউজার ক্লায়েন্ট তৈরি
        $client = static::createClient();

        // / URL এ রিকোয়েস্ট পাঠানো
        $client->request('GET', '/');

        // 200 OK স্ট্যাটাস কোড চেক করা
        $this->assertResponseIsSuccessful();

        // পেজের কন্টেন্ট চেক করা
        $this->assertSelectorTextContains('h1', 'Welcome to Symfony!');
    }
}
  • createClient(): একটি HTTP ক্লায়েন্ট তৈরি করে।
  • request(): HTTP রিকোয়েস্ট পাঠানো হয়।
  • assertResponseIsSuccessful(): রেসপন্স সফল কিনা যাচাই করা হয়।
  • assertSelectorTextContains(): HTML উপাদান চেক করা হয়।

কন্ট্রোলার টেস্ট চালানো:

php bin/phpunit tests/Controller/HomeControllerTest.php

Symfony তে সার্ভিস টেস্টিং

Symfony তে সার্ভিস টেস্টিং করতে, সার্ভিসের ইনজেকশন এবং তার কার্যকারিতা পরীক্ষা করা হয়। PHPUnit-এর মাধ্যমে, আপনি সার্ভিসের মেথডগুলি টেস্ট করতে পারেন।

সার্ভিস টেস্ট উদাহরণ

// src/Service/Calculator.php
namespace App\Service;

class Calculator
{
    public function add(int $a, int $b): int
    {
        return $a + $b;
    }
}

এখন, Calculator সার্ভিসের টেস্টিং করা যাক:

// tests/Service/CalculatorTest.php
namespace App\Tests\Service;

use App\Service\Calculator;
use PHPUnit\Framework\TestCase;

class CalculatorTest extends TestCase
{
    public function testAdd(): void
    {
        $calculator = new Calculator();

        $this->assertEquals(5, $calculator->add(2, 3));
    }
}

সার্ভিস টেস্ট চালানো:

php bin/phpunit tests/Service/CalculatorTest.php

ইউনিট টেস্টিং

ইউনিট টেস্টিং হল সিস্টেমের সবচেয়ে ছোট অংশের পরীক্ষা, যেমন ফাংশন বা ক্লাস। এটি বিশেষ করে একক কোড ইউনিটের প্রত্যাশিত আউটপুট যাচাই করে।

ইউনিট টেস্ট উদাহরণ

// src/Service/Calculator.php
namespace App\Service;

class Calculator
{
    public function add(int $a, int $b): int
    {
        return $a + $b;
    }

    public function multiply(int $a, int $b): int
    {
        return $a * $b;
    }
}

এখন, এই ক্লাসের মেথডগুলোর ইউনিট টেস্ট করা হবে:

// tests/Service/CalculatorTest.php
namespace App\Tests\Service;

use App\Service\Calculator;
use PHPUnit\Framework\TestCase;

class CalculatorTest extends TestCase
{
    public function testAdd(): void
    {
        $calculator = new Calculator();
        $this->assertEquals(10, $calculator->add(5, 5));
    }

    public function testMultiply(): void
    {
        $calculator = new Calculator();
        $this->assertEquals(15, $calculator->multiply(5, 3));
    }
}

Symfony তে ইন্টিগ্রেশন টেস্ট

ইন্টিগ্রেশন টেস্টের মাধ্যমে সার্ভিস এবং কন্ট্রোলারগুলির একত্রে কাজ করার সঠিকতা পরীক্ষা করা হয়। এটি একটি বা একাধিক কম্পোনেন্টের মধ্যে সমন্বয় পরীক্ষা করে।

// tests/Integration/CalculatorServiceTest.php
namespace App\Tests\Integration;

use App\Service\Calculator;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

class CalculatorServiceTest extends KernelTestCase
{
    public function testService(): void
    {
        self::bootKernel();
        $calculator = self::$container->get(Calculator::class);

        $this->assertEquals(10, $calculator->add(7, 3));
    }
}

সারাংশ

Symfony তে টেস্টিং কোডের গুণগত মান বজায় রাখার জন্য একটি অপরিহার্য অংশ। PHPUnit ব্যবহারের মাধ্যমে আপনি ইউনিট টেস্টিং, ফাংশনাল টেস্টিং এবং ইন্টিগ্রেশন টেস্টিং সহজেই করতে পারেন। Symfony এর WebTestCase এবং KernelTestCase সহ বিভিন্ন টেস্টিং টুল আপনাকে কন্ট্রোলার, সার্ভিস এবং ডাটাবেসের সমন্বয় পরীক্ষা করার সুবিধা দেয়। টেস্টিংয়ের মাধ্যমে আপনার অ্যাপ্লিকেশন হবে আরো শক্তিশালী এবং নিরাপদ।

Content added By

Symfony, একটি শক্তিশালী এবং আধুনিক PHP ফ্রেমওয়ার্ক, যা কোড টেস্টিংয়ের জন্য বেশ কিছু উন্নত এবং সহজ পদ্ধতি সরবরাহ করে। টেস্টিং শুধুমাত্র কোডের বাগ খুঁজে বের করতে সাহায্য করে না, বরং এটি কোডের কার্যকারিতা এবং রক্ষণাবেক্ষণযোগ্যতা নিশ্চিত করতে গুরুত্বপূর্ণ। Symfony-তে ইউনিট টেস্টিং, ফাংশনাল টেস্টিং, এবং ইন্টিগ্রেশন টেস্টিং করার জন্য বিভিন্ন টুল এবং কৌশল রয়েছে।

Symfony-তে টেস্টিং কার্যকরভাবে করার জন্য PHPUnit এবং Symfony WebTestCase এর মতো সরঞ্জাম ব্যবহৃত হয়। এখানে Symfony টেস্টিং সিস্টেম এবং এর প্রধান বৈশিষ্ট্যগুলির আলোচনা করা হবে।


PHPUnit এবং Symfony টেস্টিং

PHPUnit হল PHP-তে কোড টেস্টিং করার জন্য ব্যবহৃত একটি প্রধান ফ্রেমওয়ার্ক। Symfony, PHPUnit ব্যবহার করে টেস্টিংকে সহজ করে তোলে এবং WebTestCase এর মাধ্যমে ইউজার ইন্টারফেস বা HTTP অনুরোধের মাধ্যমে অ্যাপ্লিকেশনের কার্যকারিতা পরীক্ষা করা যায়।

PHPUnit ইনস্টলেশন

Symfony প্রজেক্টে PHPUnit ইনস্টল করতে:

composer require --dev phpunit/phpunit

এটি PHPUnit কে আপনার ডেভেলপমেন্ট ডিপেনডেন্সি হিসেবে ইনস্টল করবে।

PHPUnit কনফিগারেশন

PHPUnit এর জন্য একটি কনফিগারেশন ফাইল (phpunit.xml.dist) Symfony প্রজেক্টের মূল ডিরেক্টরিতে থাকতে পারে, যেখানে টেস্ট ফাইলের পাথ এবং অন্যান্য কনফিগারেশন সেট করা থাকে।

<phpunit bootstrap="config/bootstrap.php">
    <testsuites>
        <testsuite name="App Test Suite">
            <directory suffix="Test" >%kernel.project_dir%/tests</directory>
        </testsuite>
    </testsuites>
</phpunit>

এখানে tests ডিরেক্টরির মধ্যে সকল টেস্ট ফাইল থাকবে এবং PHPUnit এই ফাইলগুলো রান করবে।


Symfony টেস্টিং কেস

Symfony টেস্টিং কেসে দুটি প্রধান ধরনের টেস্টিং করা হয়:

  1. ইউনিট টেস্টিং (Unit Testing): শুধুমাত্র একক ফাংশন বা মেথড পরীক্ষা করা হয়।
  2. ফাংশনাল টেস্টিং (Functional Testing): পুরো অ্যাপ্লিকেশন বা নির্দিষ্ট ফিচার পরীক্ষা করা হয়, যেমন HTTP রিকুয়েস্ট, রাউটিং, কন্ট্রোলার, ফর্ম ইত্যাদি।

Symfony-তে সাধারণত WebTestCase ব্যবহার করে ফাংশনাল টেস্টিং করা হয়, যা HTTP অনুরোধের মাধ্যমে অ্যাপ্লিকেশনের কার্যকারিতা পরীক্ষা করতে সহায়ক।


WebTestCase - ফাংশনাল টেস্টিং

WebTestCase একটি স্পেশাল কেস যা Symfony-তে ফাংশনাল টেস্টিং এর জন্য ব্যবহৃত হয়। এটি HTTP অনুরোধ তৈরি করে, ডাটাবেসে ডেটা তৈরি বা মুছে ফেলতে পারে এবং সেই সাথে রেসপন্স চেক করে নিশ্চিত করে যে অ্যাপ্লিকেশনটি ঠিকভাবে কাজ করছে।

WebTestCase উদাহরণ

  1. Test Class উদাহরণ:

    namespace App\Tests;
    
    use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
    
    class DefaultControllerTest extends WebTestCase
    {
        public function testHomepage()
        {
            $client = static::createClient();
    
            $crawler = $client->request('GET', '/');  // GET রিকুয়েস্ট পাঠানো
    
            $this->assertResponseIsSuccessful();  // রেসপন্স সফল কিনা যাচাই
            $this->assertSelectorTextContains('h1', 'Welcome');  // h1 ট্যাগে 'Welcome' টেক্সট উপস্থিত কিনা যাচাই
        }
    }
    

    এখানে:

    • createClient() একটি HTTP ক্লায়েন্ট তৈরি করে, যা আমাদের HTTP অনুরোধ পাঠাতে সাহায্য করে।
    • request() মেথড GET, POST, PUT ইত্যাদি রিকুয়েস্ট পাঠানোর জন্য ব্যবহার করা হয়।
    • assertResponseIsSuccessful() রেসপন্স সফল কিনা যাচাই করে (HTTP status code 200)।
    • assertSelectorTextContains() ডোমে হেডারে 'Welcome' টেক্সটটি উপস্থিত কিনা যাচাই করে।
  2. POST রিকুয়েস্ট টেস্ট:

    public function testFormSubmission()
    {
        $client = static::createClient();
        $crawler = $client->request('GET', '/form');
    
        // ফর্মে ডেটা ইনপুট করা
        $form = $crawler->selectButton('Submit')->form([
            'form[name]' => 'John Doe',
            'form[email]' => 'john.doe@example.com',
        ]);
    
        $client->submit($form);  // ফর্ম সাবমিট
    
        $this->assertResponseRedirects('/thank-you');  // রিডিরেকশন ঠিক আছে কিনা যাচাই
        $this->assertSelectorTextContains('h1', 'Thank you');
    }
    

    এখানে:

    • selectButton() এবং form() ব্যবহার করে HTML ফর্মের ডেটা ইনপুট করা হয়।
    • submit() ফর্মটি সাবমিট করে।
    • assertResponseRedirects() রিডিরেকশন চেক করা হয়।

ইউনিট টেস্টিং

ইউনিট টেস্টিং সাধারণত একক ফাংশন বা ক্লাসের লজিক যাচাই করে, এবং সাধারণত এটি HTTP অনুরোধ বা রেসপন্স টেস্টিংয়ের বাইরে থাকে। Symfony-তে PHPUnit এর মাধ্যমে ইউনিট টেস্টিং করা হয়।

উদাহরণ:

namespace App\Tests;

use PHPUnit\Framework\TestCase;
use App\Service\Calculator;

class CalculatorTest extends TestCase
{
    public function testAdd()
    {
        $calculator = new Calculator();
        $result = $calculator->add(2, 3);
        $this->assertEquals(5, $result);
    }
}

এখানে add() ফাংশনের জন্য ইউনিট টেস্ট করা হয়েছে, যা দুটি নম্বর যোগ করে ফলাফল ফেরত দেয়।


Mocking এবং Stubbing

Mocking এবং Stubbing টেস্টিংয়ের দুটি গুরুত্বপূর্ণ কৌশল। Symfony-তে PHPUnit দিয়ে আপনি মক অবজেক্ট তৈরি করতে পারেন, যা বাহ্যিক ডিপেন্ডেন্সি বা সার্ভিসের ভ্যালু ফেরত দেয়, তবে আসল ডিপেন্ডেন্সি ছাড়া।

Mocking উদাহরণ:

public function testServiceMethod()
{
    $mockService = $this->createMock(MyService::class);
    $mockService->method('getData')->willReturn('mock data');

    $this->assertEquals('mock data', $mockService->getData());
}

এখানে, MyService ক্লাসের getData মেথডের মক করা হয়েছে, যাতে এটি mock data ফেরত দেয়।


সারাংশ

Symfony-তে টেস্টিং খুবই গুরুত্বপূর্ণ একটি প্রক্রিয়া যা অ্যাপ্লিকেশনের কোডের নির্ভরযোগ্যতা নিশ্চিত করে। PHPUnit এবং WebTestCase ব্যবহার করে আপনি সহজে ইউনিট টেস্টিং এবং ফাংশনাল টেস্টিং করতে পারবেন। Symfony টেস্টিং সিস্টেম উন্নত মানের টেস্টিং, মকিং, এবং ফর্ম ভ্যালিডেশন টেস্টিংকে সহজ করে তোলে, যা ডেভেলপমেন্ট প্রক্রিয়ায় অত্যন্ত কার্যকর।

Content added By

PHPUnit PHP-এর একটি সবচেয়ে জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক, যা Symfony প্রজেক্টে ইউনিট টেস্টিং করতে ব্যবহৃত হয়। Symfony-তে PHPUnit সেটআপ এবং ব্যবহার করা খুবই সহজ এবং এটি আপনার কোডের কার্যকারিতা নিশ্চিত করতে সাহায্য করে। ইউনিট টেস্টিং আপনার অ্যাপ্লিকেশনের পৃথক ইউনিটগুলির (ফাংশন, মেথড, ক্লাস ইত্যাদি) সঠিকতা পরীক্ষা করতে ব্যবহৃত হয়, যাতে কোডের বাগ ও সমস্যাগুলি আগে থেকেই শনাক্ত করা যায়।


PHPUnit কী?

PHPUnit হল একটি টেস্টিং ফ্রেমওয়ার্ক যা PHP কোডের জন্য বিশেষভাবে ডিজাইন করা হয়েছে। এটি একটি এগজাম্পল-ড্রিভেন ডেভেলপমেন্ট (TDD) পদ্ধতি অনুসরণ করে, যেখানে কোড লেখার আগে তার টেস্ট লেখা হয়। PHPUnit ফ্রেমওয়ার্কটি ইউনিট টেস্টিংয়ের জন্য ডেভেলপারদের সাপোর্ট প্রদান করে, যার মাধ্যমে ডেভেলপাররা নিশ্চিত হতে পারেন যে তাদের কোড প্রত্যাশিতভাবে কাজ করছে।


Symfony-তে PHPUnit সেটআপ

Symfony প্রজেক্টে PHPUnit সেটআপ করার জন্য কয়েকটি পদক্ষেপ অনুসরণ করতে হবে। Symfony 4 এবং তার পরবর্তী সংস্করণে PHPUnit স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত থাকে, তবে যদি এটি না থাকে, তবে এটি Composer ব্যবহার করে ইনস্টল করা যেতে পারে।

1. PHPUnit ইনস্টলেশন

Symfony প্রজেক্টে PHPUnit ইনস্টল করতে Composer ব্যবহার করা হয়। আপনি এটি dev নির্ভরশীলতা হিসেবে ইনস্টল করতে পারেন:

composer require --dev phpunit/phpunit

এটি phpunit ইনস্টল করবে এবং Symfony প্রজেক্টে টেস্টিং ফ্রেমওয়ার্ক ব্যবহারের জন্য প্রস্তুত করবে।

2. PHPUnit কনফিগারেশন

Symfony স্বয়ংক্রিয়ভাবে PHPUnit কনফিগারেশন ফাইল phpunit.xml.dist তৈরি করে থাকে, যা টেস্টের কনফিগারেশন এবং টেস্টিং পরিবেশ সেটআপ করে। সাধারণত এই ফাইলটি tests/ ডিরেক্টরির মধ্যে অবস্থিত থাকে।

phpunit.xml.dist উদাহরণ:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
    backupGlobals="false"
    bootstrap="vendor/autoload.php"
    colors="true"
    verbose="true"
>
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory>./tests</directory>
        </testsuite>
    </testsuites>
</phpunit>

এখানে:

  • bootstrap="vendor/autoload.php": PHPUnit পরীক্ষার শুরুতে Composer-এর autoload.php ফাইলটি লোড করে, যাতে Symfony প্রজেক্টের সমস্ত ক্লাস একত্রে কাজ করে।
  • <testsuite>: এখানে আপনার টেস্ট ফাইলগুলি কোথায় অবস্থিত তা উল্লেখ করা হয়। সাধারণত টেস্ট ফাইলগুলি tests/ ডিরেক্টরিতে রাখা হয়।

Symfony-তে PHPUnit টেস্ট লেখা

PHPUnit টেস্ট লিখতে হলে আপনাকে একটি ক্লাস তৈরি করতে হবে যা PHPUnit\Framework\TestCase ক্লাস থেকে সম্প্রসারিত হবে। এতে assertion মেথড ব্যবহার করা হয়, যা টেস্টের ফলাফল যাচাই করে।

3. টেস্ট ক্লাস তৈরি করা

ধরা যাক, আপনার একটি CalculatorService ক্লাস রয়েছে, যা দুটি সংখ্যার যোগফল বের করার জন্য ব্যবহৃত হয়।

CalculatorService.php:

namespace App\Service;

class CalculatorService
{
    public function add(int $a, int $b): int
    {
        return $a + $b;
    }
}

এখন, CalculatorService ক্লাসের জন্য একটি টেস্ট ক্লাস তৈরি করা হবে।

4. টেস্ট ক্লাস লিখা

CalculatorServiceTest.php ফাইলটি tests/Service ডিরেক্টরিতে তৈরি করা যেতে পারে।

CalculatorServiceTest.php:

namespace App\Tests\Service;

use App\Service\CalculatorService;
use PHPUnit\Framework\TestCase;

class CalculatorServiceTest extends TestCase
{
    public function testAdd()
    {
        $calculator = new CalculatorService();
        
        // Test addition of two positive numbers
        $result = $calculator->add(2, 3);
        $this->assertEquals(5, $result);
        
        // Test addition of negative and positive numbers
        $result = $calculator->add(-2, 3);
        $this->assertEquals(1, $result);
        
        // Test addition of two negative numbers
        $result = $calculator->add(-2, -3);
        $this->assertEquals(-5, $result);
    }
}

এখানে:

  • testAdd(): এটি একটি টেস্ট মেথড, যা add() মেথডের সঠিকতা পরীক্ষা করে।
  • assertEquals(): এটি PHPUnit এর একটি assertion মেথড, যা প্রত্যাশিত ফলাফল (expected value) এবং আসল ফলাফল (actual value) মেলানোর জন্য ব্যবহৃত হয়।

5. PHPUnit টেস্ট রান করা

একবার টেস্ট ক্লাস তৈরি করা হলে, আপনি PHPUnit রান করতে পারেন এবং টেস্টগুলির ফলাফল দেখতে পারেন। টেস্ট রান করতে নিচের কমান্ড ব্যবহার করুন:

vendor/bin/phpunit

এটি tests/ ডিরেক্টরির সমস্ত টেস্ট ফাইল চলাবে এবং পরীক্ষার ফলাফল দেখাবে।

Output Example:

$ ./vendor/bin/phpunit

PHPUnit 9.5.10 by Sebastian Bergmann and contributors.

.....                                                         5 / 5 (100%)

Time: 00:00.102, Memory: 6.00 MB

OK (5 tests, 5 assertions)

এখানে:

  • .....: প্রতিটি টেস্ট সফলভাবে সম্পন্ন হয়েছে।
  • OK (5 tests, 5 assertions): মোট ৫টি টেস্ট এবং ৫টি assertion সফল হয়েছে।

6. PHPUnit টেস্টে মক এবং স্টাব (Mocking and Stubbing)

PHPUnit মকিং (Mocking) এবং স্টাবিং (Stubbing) এর মাধ্যমে আপনি ডিপেন্ডেন্সি ইনজেকশন বা সার্ভিসগুলোকে মক করতে পারেন। এটি বিশেষভাবে টেস্টিংয়ের জন্য উপকারী যখন আপনি কোনো সার্ভিস বা ক্লাসের আচরণ পরিবর্তন করতে চান।

Mocking Example:

use PHPUnit\Framework\TestCase;

class ExampleTest extends TestCase
{
    public function testMocking()
    {
        $mock = $this->createMock(CalculatorService::class);
        $mock->method('add')->willReturn(10);
        
        $this->assertEquals(10, $mock->add(5, 5));
    }
}

এখানে:

  • createMock() মেথড ব্যবহার করে CalculatorService ক্লাসের একটি মক অবজেক্ট তৈরি করা হয়েছে।
  • willReturn() মেথড ব্যবহার করে মক অবজেক্টের add() মেথডকে ১০ রিটার্ন করার জন্য কনফিগার করা হয়েছে।

সারাংশ

Symfony-তে PHPUnit দিয়ে ইউনিট টেস্টিং করা অত্যন্ত গুরুত্বপূর্ণ এবং কোডের গুণগত মান নিশ্চিত করার একটি কার্যকর উপায়। PHPUnit আপনাকে কোডের প্রত্যেকটি ইউনিট বা মেথড পরীক্ষা করতে সাহায্য করে এবং বাগ শনাক্ত করতে সহায়ক। Symfony-তে PHPUnit ইনস্টল করা, কাস্টম টেস্ট ক্লাস তৈরি করা, এবং মকিং/স্টাবিংয়ের মাধ্যমে সহজে টেস্ট পরিচালনা করা সম্ভব।

Content added By

ফাংশনাল টেস্টিং হল এমন একটি টেস্টিং পদ্ধতি যার মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনটির ব্যবহারকারীর দৃষ্টিকোণ থেকে কার্যকারিতা যাচাই করেন। Symfony-তে, ফাংশনাল টেস্টিং ব্যবহারকারীর ক্রিয়াকলাপগুলি সিমুলেট করে, যেমন একটি HTTP অনুরোধ তৈরি করা এবং সেই অনুরোধের প্রতিক্রিয়া পরীক্ষা করা। এটি নিশ্চিত করে যে পুরো অ্যাপ্লিকেশনটি প্রত্যাশিতভাবে কাজ করছে।

Symfony-তে ফাংশনাল টেস্টিং পরিচালনা করতে Symfony PHPUnit টেস্ট ফ্রেমওয়ার্ক ব্যবহৃত হয়, যা PHP-এর PHPUnit লাইব্রেরির উপর ভিত্তি করে। Symfony-তে ফাংশনাল টেস্ট চালানোর জন্য, আপনি WebTestCase ক্লাস ব্যবহার করবেন, যা HTTP অনুরোধ তৈরি এবং পরীক্ষার জন্য প্রয়োজনীয় সরঞ্জাম সরবরাহ করে।


Symfony ফাংশনাল টেস্টিং এর উপকারিতা

  1. ব্যবহারকারীর দৃষ্টিকোণ থেকে পরীক্ষা:
    ফাংশনাল টেস্ট ব্যবহারকারীকে সিমুলেট করে, তাই এটি অ্যাপ্লিকেশনটি বাস্তব পরিস্থিতিতে কিভাবে কাজ করবে তা নিশ্চিত করে।
  2. কমপ্লেক্স কার্যকারিতা পরীক্ষা:
    এটি পুরো অ্যাপ্লিকেশনের কার্যকারিতা পরীক্ষা করে, যেমন রাউটিং, কন্ট্রোলার, এবং ভিউ ইন্টিগ্রেশন।
  3. অ্যাপ্লিকেশন স্টেট যাচাই:
    ফাংশনাল টেস্ট ডেটাবেসের সাথে যোগাযোগ করে, অ্যাপ্লিকেশনটির স্টেট এবং ফাংশনালিটি নিশ্চিত করতে সাহায্য করে।

Symfony ফাংশনাল টেস্ট তৈরি করা

Symfony-তে ফাংশনাল টেস্ট তৈরি করতে, আপনাকে WebTestCase ক্লাস ব্যবহার করতে হবে, যা HTTP অনুরোধ তৈরি করতে এবং প্রতিক্রিয়া যাচাই করতে সাহায্য করে।

WebTestCase ক্লাস ব্যবহার

WebTestCase ক্লাস Symfony-তে ফাংশনাল টেস্ট করার জন্য ব্যবহার করা হয়। এই ক্লাসটি HTTP অনুরোধ করতে এবং তার প্রতিক্রিয়া পরীক্ষা করতে ব্যবহৃত হয়। এটি Symfony\Bundle\FrameworkBundle\Test\WebTestCase থেকে ইনহেরিট করা হয়।

ফাংশনাল টেস্ট উদাহরণ

  1. ফাংশনাল টেস্ট ক্লাস তৈরি করা: Symfony প্রজেক্টের tests/ ডিরেক্টরিতে একটি টেস্ট ক্লাস তৈরি করতে হবে।

    উদাহরণ:

    // tests/Controller/HomeControllerTest.php
    namespace App\Tests\Controller;
    
    use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
    
    class HomeControllerTest extends WebTestCase
    {
        public function testHomePage()
        {
            // HTTP অনুরোধ তৈরি
            $client = static::createClient();
            $client->request('GET', '/');
    
            // রেসপন্স যাচাই
            $this->assertResponseIsSuccessful();
            $this->assertSelectorTextContains('h1', 'Welcome to Symfony!');
        }
    }
    

    এখানে:

    • createClient() ফাংশনটি একটি HTTP ক্লায়েন্ট তৈরি করে।
    • request() ফাংশনটি একটি GET অনুরোধ তৈরি করে এবং / পাথকে পরীক্ষা করে।
    • assertResponseIsSuccessful() ফাংশনটি চেক করে যে HTTP প্রতিক্রিয়া সফল (200 OK) ছিল কি না।
    • assertSelectorTextContains() ফাংশনটি টেমপ্লেটের মধ্যে <h1> ট্যাগের মধ্যে "Welcome to Symfony!" টেক্সটটি উপস্থিত কিনা তা যাচাই করে।
  2. ফাংশনাল টেস্ট চালানো: টেস্ট চালানোর জন্য, আপনি কমান্ড লাইনে PHPUnit ব্যবহার করবেন:

    php bin/phpunit
    

    এই কমান্ডটি টেস্ট ফোল্ডারে থাকা সমস্ত টেস্ট ক্লাস চালাবে।


ফাংশনাল টেস্টে আরও কিছু জনপ্রিয় Assertion

Symfony ফাংশনাল টেস্টে বিভিন্ন ধরনের assertion ব্যবহার করা যায়। এখানে কিছু সাধারণ assertion এর উদাহরণ:

  1. assertResponseIsSuccessful():
    এটি HTTP রেসপন্সের স্ট্যাটাস কোড চেক করে। সফল রেসপন্সের জন্য এটি 200 OK আশা করে।

    $this->assertResponseIsSuccessful();
    
  2. assertResponseStatusCodeSame():
    এটি নির্দিষ্ট HTTP স্ট্যাটাস কোড চেক করে।

    $this->assertResponseStatusCodeSame(404);  // Expecting 404 Not Found
    
  3. assertSelectorTextContains():
    এটি একটি HTML সিলেক্টরের মধ্যে টেক্সটের উপস্থিতি পরীক্ষা করে।

    $this->assertSelectorTextContains('h1', 'Hello, World!');
    
  4. assertJsonContains():
    এটি JSON রেসপন্সের মধ্যে একটি নির্দিষ্ট ডাটা চেক করে।

    $this->assertJsonContains([
        'name' => 'John Doe'
    ]);
    
  5. assertSelectorExists():
    এটি HTML ডকুমেন্টে একটি সিলেক্টরের উপস্থিতি পরীক্ষা করে।

    $this->assertSelectorExists('div.main-content');
    
  6. assertRedirect():
    এটি রিডাইরেক্ট সঠিকভাবে হচ্ছে কিনা তা চেক করে।

    $this->assertRedirectToRoute('homepage');
    

ফাংশনাল টেস্টে ডাটাবেস পরীক্ষা

ফাংশনাল টেস্টে আপনি ডাটাবেসের সাথে ইন্টারঅ্যাক্টও করতে পারেন, তবে সাধারণত টেস্টের জন্য একটি পৃথক ডাটাবেস ব্যবহার করা হয়। Symfony ফাংশনাল টেস্টের জন্য একটি সেপারেট ডাটাবেস তৈরি করতে phpunit.xml.dist ফাইল কনফিগার করা হয়, যাতে টেস্টের ডেটা মূল ডাটাবেসে প্রভাব ফেলবে না।

টেস্ট ডাটাবেস সেটআপ:

php bin/console doctrine:database:create --env=test
php bin/console doctrine:schema:update --force --env=test

Symfony ফাংশনাল টেস্টিং এর সুবিধা

  1. ব্যবহারকারীর প্রেক্ষাপটে পরীক্ষা:
    এটি ব্যবহারকারীর দৃষ্টিকোণ থেকে অ্যাপ্লিকেশনটি পরীক্ষা করে, সুতরাং অ্যাপ্লিকেশনটি বাস্তব দুনিয়ায় কেমন কাজ করবে তা জানানো সহজ।
  2. বিভিন্ন অংশের ইন্টিগ্রেশন পরীক্ষা:
    একাধিক সার্ভিস বা কন্ট্রোলারের ইন্টিগ্রেশন পরীক্ষা করা যায়।
  3. ডেটাবেস ইন্টিগ্রেশন পরীক্ষা:
    ফাংশনাল টেস্ট ডেটাবেসের সাথে ইন্টিগ্রেটেড পরীক্ষার সুযোগ দেয়, যা গুরুত্বপূর্ণ।
  4. অ্যাপ্লিকেশন কর্মক্ষমতা:
    অ্যাপ্লিকেশনটির কর্মক্ষমতা যাচাই এবং বাস্তব পরিবেশে তা কেমন কাজ করবে তা নিশ্চিত করা যায়।

সারাংশ

ফাংশনাল টেস্টিং Symfony-তে একটি গুরুত্বপূর্ণ টেস্টিং পদ্ধতি, যা ব্যবহারকারীর অনুরোধ এবং প্রতিক্রিয়া যাচাই করার জন্য ব্যবহৃত হয়। WebTestCase ক্লাস ব্যবহার করে Symfony ফাংশনাল টেস্টিং সহজ এবং কার্যকর। এটি অ্যাপ্লিকেশনটির কার্যকারিতা যাচাই করার জন্য গুরুত্বপূর্ণ এবং ডেটাবেস, রাউটিং, কন্ট্রোলার এবং অন্যান্য ইন্টিগ্রেশন টেস্ট করার সুযোগ দেয়। Symfony-তে ফাংশনাল টেস্টিং আপনাকে একটি পূর্ণাঙ্গ ওয়েব অ্যাপ্লিকেশন পরিচালনা করতে সহায়তা করে।

Content added By

Symfony-তে টেস্টিং একটি অত্যন্ত গুরুত্বপূর্ণ অংশ যা কোডের গুণগত মান নিশ্চিত করতে সহায়ক। Symfony বিভিন্ন ধরণের টেস্টিং সমর্থন করে, যার মধ্যে রয়েছে কন্ট্রোলার টেস্টিং, সার্ভিস টেস্টিং, এবং ফর্ম টেস্টিং। এই টেস্টিংগুলো আপনাকে আপনার অ্যাপ্লিকেশন নিশ্চিত করতে সহায়তা করে যে এটি সঠিকভাবে কাজ করছে এবং ব্যবহারকারী বা ডেভেলপমেন্ট ইন্টারফেসে কোনো সমস্যা হচ্ছে না।


কন্ট্রোলার টেস্টিং (Controller Testing)

কন্ট্রোলার টেস্টিং Symfony অ্যাপ্লিকেশনের মূল কার্যকারিতা পরীক্ষা করতে ব্যবহৃত হয়। এটি নিশ্চিত করে যে, একটি নির্দিষ্ট URL অথবা রাউট থেকে প্রত্যাশিত আউটপুট পাওয়া যাবে কিনা এবং সঠিক কন্ট্রোলারের ফাংশনটি কল হচ্ছে কিনা।

কন্ট্রোলার টেস্টিং পদ্ধতি:

Symfony-তে কন্ট্রোলার টেস্ট করার জন্য আপনি WebTestCase ব্যবহার করবেন, যা Symfony Test Case ক্লাসের অংশ।

কন্ট্রোলার টেস্ট উদাহরণ:

// tests/Controller/HomeControllerTest.php
namespace App\Tests\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class HomeControllerTest extends WebTestCase
{
    public function testHomepage()
    {
        $client = static::createClient();
        $crawler = $client->request('GET', '/');

        // চেক করা হচ্ছে যে স্ট্যাটাস কোড 200 (OK) এসেছিল কি না
        $this->assertEquals(200, $client->getResponse()->getStatusCode());

        // চেক করা হচ্ছে যে 'Welcome' টেক্সট পেজে আছে কি না
        $this->assertSelectorTextContains('h1', 'Welcome');
    }

    public function testAboutPage()
    {
        $client = static::createClient();
        $crawler = $client->request('GET', '/about');

        // চেক করা হচ্ছে স্ট্যাটাস কোড
        $this->assertEquals(200, $client->getResponse()->getStatusCode());

        // চেক করা হচ্ছে 'About Us' টেক্সট পেজে আছে কি না
        $this->assertSelectorTextContains('h1', 'About Us');
    }
}

ব্যাখ্যা:

  • WebTestCase: Symfony-তে কন্ট্রোলার টেস্ট করার জন্য একটি বেস ক্লাস, যা HTTP রিকোয়েস্ট ও রেসপন্স পরীক্ষা করতে সহায়ক।
  • createClient(): এটি একটি পৃষ্ঠা অ্যাক্সেসের জন্য ক্লায়েন্ট তৈরি করে।
  • request(): রাউট বা URL এ GET বা POST রিকোয়েস্ট পাঠানোর জন্য ব্যবহৃত হয়।
  • getResponse(): রেসপন্সের স্ট্যাটাস কোড চেক করার জন্য ব্যবহার করা হয়।

সার্ভিস টেস্টিং (Service Testing)

সার্ভিস টেস্টিং সাধারণত ব্যবসায়িক লজিক বা প্রক্রিয়া পরীক্ষা করার জন্য ব্যবহৃত হয়। Symfony Dependency Injection Container ব্যবহার করে সার্ভিস ম্যানেজমেন্ট পরিচালনা করে, এবং সার্ভিস টেস্টিং নিশ্চিত করে যে নির্দিষ্ট সার্ভিস সঠিকভাবে কাজ করছে।

সার্ভিস টেস্টিং উদাহরণ:

// tests/Service/MyServiceTest.php
namespace App\Tests\Service;

use App\Service\MyService;
use PHPUnit\Framework\TestCase;

class MyServiceTest extends TestCase
{
    public function testServiceMethod()
    {
        // MyService সার্ভিস ইনস্ট্যান্স তৈরি
        $service = new MyService();

        // সঠিক ফলাফল যাচাই করা
        $result = $service->processData('Test input');
        $this->assertEquals('Processed: Test input', $result);
    }
}

ব্যাখ্যা:

  • TestCase: PHPUnit-এর মূল ক্লাস যা টেস্টিংয়ের জন্য ব্যবহৃত হয়।
  • assertEquals(): এই ফাংশনটি ব্যবহার করে আমরা যাচাই করি যে ফাংশন থেকে আসা আউটপুট এবং প্রত্যাশিত আউটপুট মিলছে কিনা।

ফর্ম টেস্টিং (Form Testing)

ফর্ম টেস্টিং সাধারণত ফর্ম ভ্যালিডেশন, সাবমিশন এবং ফর্মের আচরণ পরীক্ষা করতে ব্যবহৃত হয়। Symfony ফর্ম সিস্টেমটি ব্যবহারকারীর ইনপুট সঠিকভাবে গ্রহণ এবং প্রক্রিয়া করার জন্য ব্যবহৃত হয়। ফর্ম টেস্টিং নিশ্চিত করে যে, ফর্ম সঠিকভাবে প্রক্রিয়া হচ্ছে এবং সঠিক ডেটা ডাটাবেসে যাচ্ছে।

ফর্ম টেস্টিং উদাহরণ:

// tests/Form/Type/ContactFormTypeTest.php
namespace App\Tests\Form\Type;

use App\Form\Type\ContactFormType;
use Symfony\Component\Form\Test\TypeTestCase;

class ContactFormTypeTest extends TypeTestCase
{
    public function testSubmitValidData()
    {
        // ফর্ম তৈরি
        $formData = [
            'name' => 'John Doe',
            'email' => 'john.doe@example.com',
            'message' => 'Hello, this is a test message.',
        ];

        // ফর্ম টাইপ ইনস্ট্যান্স তৈরি
        $form = $this->factory->create(ContactFormType::class);

        // ফর্ম সাবমিট করা
        $form->submit($formData);

        // ফর্ম ভ্যালিডেশন চেক করা
        $this->assertTrue($form->isValid());

        // ডাটা প্রক্রিয়াকরণ চেক করা
        $this->assertEquals($formData, $form->getData());
    }
}

ব্যাখ্যা:

  • TypeTestCase: Symfony-তে ফর্ম টেস্টিংয়ের জন্য একটি বেস ক্লাস যা ফর্মের ইনপুট, সাবমিশন এবং আউটপুট যাচাই করার জন্য ব্যবহৃত হয়।
  • create(): ফর্ম তৈরির জন্য ব্যবহৃত হয়।
  • submit(): ফর্মের উপর ডাটা সাবমিট করার জন্য ব্যবহৃত হয়।
  • isValid(): ফর্মের ভ্যালিডেশন চেক করতে ব্যবহৃত হয়।

Symfony টেস্টিং পদ্ধতির সুবিধা

  1. অটোমেটেড টেস্টিং: Symfony-তে টেস্টিং অটোমেটেড করা যায়, যা কোডের গুণগত মান নিশ্চিত করতে সাহায্য করে এবং বাগ সনাক্ত করতে সহায়ক।
  2. ইনটিগ্রেশন টেস্টিং: কন্ট্রোলার, সার্ভিস, এবং ফর্ম টেস্টিংকে একত্রিত করে ইনটিগ্রেশন টেস্টিং করতে সাহায্য করে।
  3. ব্যবসায়িক লজিক পরীক্ষা: সার্ভিস টেস্টিংয়ের মাধ্যমে আপনার অ্যাপ্লিকেশনের ব্যবসায়িক লজিক এবং প্রসেস ঠিকমতো কাজ করছে কিনা তা নিশ্চিত করা যায়।
  4. সহজ রক্ষণাবেক্ষণ: টেস্ট থাকা মানে আপনি সহজে আপনার কোডে পরিবর্তন করলে তা আগেরভাবে কাজ করছে কিনা নিশ্চিত করতে পারেন।

সারাংশ

Symfony-তে কন্ট্রোলার টেস্টিং, সার্ভিস টেস্টিং, এবং ফর্ম টেস্টিং তিনটি অত্যন্ত গুরুত্বপূর্ণ টেস্টিং পদ্ধতি। এগুলো নিশ্চিত করে যে আপনার অ্যাপ্লিকেশন সঠিকভাবে কাজ করছে, ফর্ম ডেটা সঠিকভাবে প্রক্রিয়া হচ্ছে, এবং সার্ভিসগুলোর কার্যকারিতা ঠিকমতো কাজ করছে। এই টেস্টিং প্রক্রিয়া আপনার অ্যাপ্লিকেশন উন্নয়ন প্রক্রিয়াকে দ্রুত এবং নিরাপদ করে তোলে, এবং ভবিষ্যতে বাগ বা সমস্যাগুলি দ্রুত সনাক্ত করতে সাহায্য করে।

Content added By

Symfony-তে টেস্ট ডাবল (Test Double) এবং মকিং (Mocking) দুটি গুরুত্বপূর্ণ ধারণা যা ইউনিট টেস্টিং এবং ইন্টিগ্রেশন টেস্টিংয়ের ক্ষেত্রে ব্যবহৃত হয়। এগুলোর সাহায্যে আপনি আপনার কোডের নির্ভরশীলতাগুলোর আচরণ কাস্টমাইজ করতে পারেন, যা আপনার টেস্টিং প্রক্রিয়াকে আরো কার্যকর এবং নির্ভুল করে তোলে।


টেস্ট ডাবল (Test Double) কী?

Test Double একটি টেস্টিং কৌশল, যা আপনার টেস্টিং কোডের জন্য এক বা একাধিক অবজেক্ট বা ক্লাসের বদলে ফাংশন বা আচরণ প্রদান করে। এটি মূলত বাস্তব বস্তু বা সার্ভিসের বিকল্প হিসেবে কাজ করে এবং মূল অবজেক্টের আচরণ প্রদান করে না। টেস্ট ডাবল সাধারণত বিভিন্ন ধরণের হয়ে থাকে: Mock, Stub, Fake, Spy, এবং Dummy

টেস্ট ডাবল-এর ধরণ:

  1. Dummy:
    Dummy টেস্ট ডাবল শুধুমাত্র একটি অবজেক্ট তৈরি করতে ব্যবহৃত হয়, যার কোন বাস্তব ব্যবহার থাকে না। এটি প্রায়ই সেই ক্ষেত্রে ব্যবহৃত হয় যেখানে একটি প্যারামিটার বা রিটার্ন ভ্যালু প্রয়োজন, কিন্তু বাস্তব ডেটার কোনো প্রয়োজন নেই।
  2. Stub:
    Stub টেস্ট ডাবল একটি অবজেক্ট যা একটি নির্দিষ্ট আচরণ প্রদান করে (যেমন রিটার্ন ভ্যালু বা ডেটা)। এটি সাধারণত নির্দিষ্ট ফলাফল প্রদান করে, যা টেস্টের ক্ষেত্রে প্রয়োজনীয়।
  3. Mock:
    Mock একটি উন্নত স্তরের টেস্ট ডাবল, যা একটি নির্দিষ্ট মেথড বা ফাংশনের কল এবং তার আর্গুমেন্ট যাচাই করে। এটি আচরণ পরীক্ষা করতে ব্যবহৃত হয় এবং কিছু নির্দিষ্ট আউটপুট প্রদান করতে পারে।
  4. Spy:
    Spy টেস্ট ডাবল মকিংয়ের মতোই, তবে এটি শুধু মেথডের কল হিস্ট্রি রাখতে ব্যবহৃত হয়, কোনও আউটপুট রিটার্ন না করেও।

Symfony-তে টেস্ট ডাবল এবং মকিং

Symfony-তে সাধারণত PHPUnit এবং Prophecy লাইব্রেরি ব্যবহার করা হয় টেস্ট ডাবল এবং মকিংয়ের জন্য। Symfony অ্যাপ্লিকেশনটিতে Prophecy-কে ইনস্টল করে মকিং এবং স্টাবিং আরও সহজভাবে করা যায়।

Prophecy ব্যবহার করে মকিং:

Prophecy একটি PHP লাইব্রেরি যা সহজেই মক অবজেক্ট তৈরি করতে সহায়ক। এটি Symfony এবং PHPUnit-এর সাথে একীভূত হয়ে কাজ করে এবং টেস্ট ডাবল তৈরি করতে ব্যবহৃত হয়।

  1. Prophecy ইনস্টল করা:

    composer require --dev phpspec/prophecy
    
  2. মক অবজেক্ট তৈরি করা (Mock Object): একটি ক্লাস বা সেবার জন্য মক অবজেক্ট তৈরি করতে prophecy ব্যবহার করতে পারেন।

    উদাহরণ:

    use Prophecy\Prophet;
    use App\Service\Mailer;
    
    $prophet = new Prophet();
    $mailer = $prophet->prophesize(Mailer::class);
    
    // মক কল নির্ধারণ
    $mailer->sendEmail('example@example.com', 'Hello World')->willReturn(true);
    
    // মক অবজেক্টে কাজ করা
    $mailer->sendEmail('example@example.com', 'Hello World');
    

    এখানে, sendEmail() মেথডটি মক করা হয়েছে এবং এটি true রিটার্ন করবে, যা টেস্টের জন্য ব্যবহার করা হবে।

  3. মকিং টেস্টের জন্য ব্যবহার: PHPUnit ব্যবহার করে মক অবজেক্টের সঙ্গে টেস্ট করতে পারবেন।

    উদাহরণ:

    public function testMailer()
    {
        $prophet = new Prophet();
        $mailer = $prophet->prophesize(Mailer::class);
        $mailer->sendEmail('test@example.com', 'Test')->willReturn(true);
    
        // মক অবজেক্ট ব্যবহার
        $this->assertTrue($mailer->reveal()->sendEmail('test@example.com', 'Test'));
    }
    

    এখানে reveal() মেথডটি মক অবজেক্টটি প্রকাশ করতে ব্যবহৃত হয়।


মকিং (Mocking) এবং স্টাবিং (Stubbing)

Mocking এবং Stubbing হল দুটি গুরুত্বপূর্ণ কৌশল, যা টেস্টিং-এর সময় সিস্টেমের নির্ভরশীলতা কাস্টমাইজ করে।

  1. Stubbing:
    এটি একটি সহজ মকিং কৌশল, যেখানে আপনি মক অবজেক্টের জন্য কিছু স্ট্যাটিক আউটপুট বা আচরণ নির্ধারণ করেন, যেমন একটি নির্দিষ্ট ভ্যালু রিটার্ন করা। এটি সাধারণত প্যারামিটার রিটার্ন বা সিম্পল মেথড কলের জন্য ব্যবহৃত হয়।
  2. Mocking:
    মকিং আরও শক্তিশালী একটি কৌশল যা নির্দিষ্ট মেথড কল এবং আর্গুমেন্ট যাচাই করতে সহায়ক। এটি সাধারণত পরীক্ষার উদ্দেশ্যে মেথড কলের ইনভোকেশন এবং তার আর্গুমেন্টের উপর নিয়ন্ত্রণ রাখতে ব্যবহৃত হয়।

স্টাবিং উদাহরণ:

// মক অবজেক্ট তৈরি
$stub = $this->createMock(Mailer::class);

// স্টাবিং - মেথডের আউটপুট নির্ধারণ
$stub->method('sendEmail')
     ->willReturn(true);

// টেস্টিং
$this->assertTrue($stub->sendEmail('test@example.com', 'Hello'));

মকিং উদাহরণ:

// মক অবজেক্ট তৈরি
$mock = $this->createMock(Mailer::class);

// মকিং - মেথড কল যাচাই
$mock->expects($this->once())  // কলটি একবার হবে
     ->method('sendEmail')
     ->with('test@example.com', 'Hello')  // আর্গুমেন্ট যাচাই
     ->willReturn(true);

// টেস্টিং
$this->assertTrue($mock->sendEmail('test@example.com', 'Hello'));

ফাংশনাল এবং ইউনিট টেস্টে মকিং ব্যবহার

Unittesting এবং Functional testing-এ মকিং এবং স্টাবিং খুবই গুরুত্বপূর্ণ। এগুলির মাধ্যমে আপনি বাস্তব সার্ভিস বা ডেটাবেসের উপর নির্ভর না করে সহজেই সিস্টেমের লজিক টেস্ট করতে পারেন।

  1. Unit Testing:
    মকিং সাধারণত ইউনিট টেস্টে ব্যবহার করা হয়, যেখানে শুধুমাত্র একটি নির্দিষ্ট ফাংশন বা মেথড পরীক্ষা করা হয়। উদাহরণস্বরূপ, যদি আপনার কোড একটি নির্দিষ্ট ডাটাবেস কলের উপর নির্ভরশীল থাকে, তবে আপনি সেই কলটি মক করে তার রিটার্ন ভ্যালু পরীক্ষা করতে পারেন।
  2. Functional Testing:
    এখানে মকিং কম ব্যবহৃত হয়, কারণ ফাংশনাল টেস্টে পুরো সিস্টেম বা অ্যাপ্লিকেশন পরীক্ষা করা হয়। তবে কিছু নির্দিষ্ট ফাংশন বা সার্ভিসের জন্য মকিং ব্যবহার করা যেতে পারে।

সারাংশ

Symfony-তে Test Double এবং Mocking দুটি শক্তিশালী টুল, যা PHPUnit এবং Prophecy লাইব্রেরির মাধ্যমে কার্যকরীভাবে ব্যবহৃত হয়। এগুলি ব্যবহার করে আপনি আপনার কোডের নির্ভরশীলতা মক বা স্টাব করতে পারেন এবং সেই মক অবজেক্টের আচরণ কাস্টমাইজ করতে পারেন। এর ফলে আপনি আপনার কোডের ইউনিট বা ফাংশনাল টেস্টিং আরও নির্ভুল এবং নির্ভরযোগ্যভাবে পরিচালনা করতে সক্ষম হন।

Content added By
Promotion

Are you sure to start over?

Loading...