PHPUnit দিয়ে ইউনিট টেস্টিং

Symfony তে টেস্টিং - সিম্ফনি (Symfony) - Web Development

329

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
Promotion

Are you sure to start over?

Loading...