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 টেস্টিং কেসে দুটি প্রধান ধরনের টেস্টিং করা হয়:
- ইউনিট টেস্টিং (Unit Testing): শুধুমাত্র একক ফাংশন বা মেথড পরীক্ষা করা হয়।
- ফাংশনাল টেস্টিং (Functional Testing): পুরো অ্যাপ্লিকেশন বা নির্দিষ্ট ফিচার পরীক্ষা করা হয়, যেমন HTTP রিকুয়েস্ট, রাউটিং, কন্ট্রোলার, ফর্ম ইত্যাদি।
Symfony-তে সাধারণত WebTestCase ব্যবহার করে ফাংশনাল টেস্টিং করা হয়, যা HTTP অনুরোধের মাধ্যমে অ্যাপ্লিকেশনের কার্যকারিতা পরীক্ষা করতে সহায়ক।
WebTestCase - ফাংশনাল টেস্টিং
WebTestCase একটি স্পেশাল কেস যা Symfony-তে ফাংশনাল টেস্টিং এর জন্য ব্যবহৃত হয়। এটি HTTP অনুরোধ তৈরি করে, ডাটাবেসে ডেটা তৈরি বা মুছে ফেলতে পারে এবং সেই সাথে রেসপন্স চেক করে নিশ্চিত করে যে অ্যাপ্লিকেশনটি ঠিকভাবে কাজ করছে।
WebTestCase উদাহরণ
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' টেক্সটটি উপস্থিত কিনা যাচাই করে।
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 টেস্টিং সিস্টেম উন্নত মানের টেস্টিং, মকিং, এবং ফর্ম ভ্যালিডেশন টেস্টিংকে সহজ করে তোলে, যা ডেভেলপমেন্ট প্রক্রিয়ায় অত্যন্ত কার্যকর।
Read more