CakePHP একটি অত্যন্ত শক্তিশালী PHP ফ্রেমওয়ার্ক, এবং এটি PHPUnit ব্যবহার করে অ্যাপ্লিকেশনের ইউনিট টেস্টিং সমর্থন করে। PHPUnit হল একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক, যা PHP কোডের জন্য অটোমেটেড টেস্টিং সাপোর্ট প্রদান করে। CakePHP-তে PHPUnit ব্যবহার করে আপনি সহজেই মডেল, কন্ট্রোলার, ভিউ, এবং অন্যান্য অংশের জন্য টেস্ট তৈরি করতে পারেন, যা অ্যাপ্লিকেশনের স্থিতিশীলতা এবং কার্যকারিতা নিশ্চিত করতে সাহায্য করে।
PHPUnit টেস্টিং সেটআপ
CakePHP তে PHPUnit দিয়ে টেস্টিং করার জন্য আপনাকে প্রথমে PHPUnit ইন্সটল করতে হবে এবং তারপর এটি CakePHP এর টেস্টিং পরিবেশে কনফিগার করতে হবে।
১. PHPUnit ইনস্টলেশন
PHPUnit ইনস্টল করার জন্য আপনি Composer ব্যবহার করতে পারেন। নিচে কমান্ডটি দেওয়া হলো:
composer require --dev phpunit/phpunit
এটি আপনার প্রকল্পে PHPUnit ডিপেন্ডেন্সি হিসেবে যোগ করবে। তারপর আপনি vendor/bin/phpunit অথবা ./vendor/bin/phpunit কমান্ড ব্যবহার করে PHPUnit রান করতে পারবেন।
CakePHP টেস্টিং পরিবেশ কনফিগারেশন
CakePHP তে টেস্টিং পরিবেশে কাজ করার জন্য কিছু ডিরেক্টরি এবং কনফিগারেশন সেটআপ করতে হবে।
২. টেস্ট ডিরেক্টরি তৈরি
CakePHP তে ডিফল্টভাবে টেস্ট ফাইলগুলি tests ডিরেক্টরিতে রাখা হয়। আপনি tests ডিরেক্টরি তৈরি করতে পারেন যদি তা আগে থেকেই না থাকে।
mkdir tests
এরপর, tests ডিরেক্টরির মধ্যে আপনি আলাদা আলাদা ফাইল তৈরি করতে পারেন, যেমন Controller, Model, Integration, ইত্যাদি।
৩. কনফিগারেশন ফাইল
CakePHP তে টেস্ট কনফিগারেশন সাধারণত config/bootstrap.php ফাইলে সেট করা হয়, যেখানে টেস্টের জন্য প্রয়োজনীয় কনফিগারেশন এবং ডাটাবেসের সেটিংস রাখা হয়।
// config/bootstrap.php
use Cake\TestSuite\Fixture\FixtureManager;
// Bootstrap the CakePHP application
if (Configure::read('debug')) {
// Configure Test Database or connection settings here
ConnectionManager::config('test', [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'cakephp_test',
'encoding' => 'utf8',
]);
}
// Run PHPUnit bootstrap
Plugin::load('Test', ['path' => APP . 'Plugin' . DS]);
এখানে test ডাটাবেস কনফিগার করা হয়েছে, যা শুধুমাত্র টেস্টিংয়ের জন্য ব্যবহার হবে।
PHPUnit টেস্ট কেস তৈরি করা
CakePHP তে টেস্ট কেস তৈরি করতে আপনাকে টেস্ট ক্লাস তৈরি করতে হবে, যা PHPUnit এর ক্লাস থেকে বর্ধিত হবে। প্রতিটি টেস্ট কেসে আপনি যে ফিচার বা কোড টেস্ট করতে চান তা লিখবেন।
৪. টেস্ট ক্লাস তৈরি
tests/ ডিরেক্টরির মধ্যে একটি টেস্ট ক্লাস তৈরি করুন। এখানে একটি Controller টেস্টের উদাহরণ দেওয়া হল।
// tests/TestCase/Controller/ArticlesControllerTest.php
namespace App\Test\TestCase\Controller;
use Cake\TestSuite\IntegrationTestCase;
class ArticlesControllerTest extends IntegrationTestCase
{
public $fixtures = [
'app.Articles',
];
public function testIndex()
{
// URL টেস্ট করা
$this->get('/articles');
// HTTP স্ট্যাটাস কোড পরীক্ষা করা
$this->assertResponseCode(200);
// পেজে সঠিক কনটেন্ট উপস্থিত আছে কিনা পরীক্ষা করা
$this->assertResponseContains('Articles');
}
public function testAdd()
{
$data = [
'title' => 'New Article',
'body' => 'This is a new article.',
];
// পোস্ট রিকুয়েস্ট পাঠানো
$this->post('/articles/add', $data);
// সঠিক রিডিরেক্ট চেক করা
$this->assertRedirect(['action' => 'index']);
// ডাটাবেসে নতুন এন্ট্রি থাকা কিনা পরীক্ষা করা
$articles = $this->getTableLocator()->get('Articles');
$article = $articles->find()->where(['title' => 'New Article'])->first();
$this->assertNotEmpty($article);
}
}
এখানে:
IntegrationTestCaseব্যবহৃত হয়েছে, যা কন্ট্রোলার অ্যাকশনগুলোকে একটি সম্পূর্ণ রিকুয়েস্ট ও রেসপন্স সিস্টেমে টেস্ট করতে সাহায্য করে।testIndex()এবংtestAdd()ফাংশন দুটি হলো আলাদা টেস্ট মেথড, যেখানে/articlesরুটের জন্য GET এবং POST রিকুয়েস্ট টেস্ট করা হয়েছে।assertResponseCode()দিয়ে HTTP রেসপন্স কোড চেক করা হচ্ছে এবংassertResponseContains()দিয়ে পেজে সঠিক কনটেন্ট উপস্থিত আছে কিনা তা নিশ্চিত করা হচ্ছে।assertRedirect()দিয়ে রিডিরেক্ট চেক করা হয়েছে এবংgetTableLocator()->get('Articles')ব্যবহার করে ডাটাবেসে নতুন রেকর্ড টেস্ট করা হয়েছে।
PHPUnit টেস্ট চালানো
এখন আপনি PHPUnit রান করে আপনার টেস্টগুলো চালাতে পারেন:
./vendor/bin/phpunit tests
এটি সমস্ত টেস্ট ফাইলগুলো রান করবে এবং পরীক্ষার ফলাফল দেখাবে।
৫. টেস্ট ফলাফল
PHPUnit রান করার পর, আপনি টেস্টের ফলাফল দেখতে পাবেন:
PHPUnit 9.5.4 by Sebastian Bergmann and contributors.
.. 2 / 2 (100%)
Time: 00:01.234, Memory: 10.00 MB
OK (2 tests, 2 assertions)
এখানে OK মানে সমস্ত টেস্ট সফলভাবে সম্পন্ন হয়েছে এবং tests, assertions গুলি টেস্ট কেসের সংখ্যা ও পরীক্ষা করা হয়েছে এমন শর্তের সংখ্যা।
টেস্ট ফিক্সচার ব্যবহার
CakePHP তে টেস্ট ফিক্সচার ব্যবহারের মাধ্যমে আপনি ডাটাবেসে ডামি ডেটা তৈরি করতে পারেন, যা টেস্টিংয়ের জন্য প্রয়োজনীয়। ফিক্সচার হলো ডেটাবেস টেবিলের মডেল যা টেস্ট চলাকালীন ডামি ডেটা সরবরাহ করে।
৬. ফিক্সচার কনফিগারেশন
// tests/Fixture/ArticlesFixture.php
namespace App\Test\Fixture;
use Cake\TestSuite\Fixture\TestFixture;
class ArticlesFixture extends TestFixture
{
public $fields = [
'id' => ['type' => 'integer', 'autoIncrement' => true],
'title' => ['type' => 'string', 'length' => 255],
'body' => ['type' => 'text'],
'created' => 'datetime',
'modified' => 'datetime',
];
public $records = [
[
'title' => 'Article 1',
'body' => 'This is article 1.',
'created' => '2024-12-07 10:00:00',
'modified' => '2024-12-07 10:00:00',
],
[
'title' => 'Article 2',
'body' => 'This is article 2.',
'created' => '2024-12-07 11:00:00',
'modified' => '2024-12-07 11:00:00',
],
];
}
এখানে:
- $fields এ টেবিলের ফিল্ড গুলো ডিফাইন করা হয়েছে।
- $records এ ডামি ডেটা যোগ করা হয়েছে যা টেস্ট চলাকালে ব্যবহার হবে।
CakePHP তে PHPUnit দিয়ে টেস্টিং করা একটি গুরুত্বপূর্ণ এবং কার্যকর পদ্ধতি যা অ্যাপ্লিকেশনের কার্যকারিতা নিশ্চিত করে। CakePHP তে টেস্ট কেস তৈরি করা, ডাটাবেস ফিক্সচার ব্যবহার করা, এবং PHPUnit রান করে টেস্ট ফলাফল পাওয়া খুব সহজ। এই প্রক্রিয়া অনুসরণ করলে আপনি নিশ্চিত করতে পারবেন যে আপনার অ্যাপ্লিকেশনটি নির্ভরযোগ্য, স্থিতিশীল এবং ভুল মুক্ত।
Read more