CakePHP তে Testing অত্যন্ত গুরুত্বপূর্ণ একটি অংশ, যা অ্যাপ্লিকেশনের কোডের নির্ভরযোগ্যতা নিশ্চিত করতে সাহায্য করে। Fixtures, Test Cases, এবং Mocking এর মাধ্যমে আপনি আপনার অ্যাপ্লিকেশন কোডের কার্যকারিতা যাচাই করতে পারেন। এগুলো কোডের বিভিন্ন অংশের সঠিক কাজকর্ম এবং ইন্টারঅ্যাকশন পরীক্ষা করার জন্য ব্যবহৃত হয়।
Fixtures
Fixtures হলো ডামি ডেটা যা টেস্টিংয়ের জন্য ব্যবহার করা হয়। এগুলি সাধারণত ডেটাবেসের টেবিলের মতো আচরণ করে, তবে টেস্ট চলাকালীন সময়েই এই ডেটাগুলি তৈরি এবং ধ্বংস হয়। Fixtures দিয়ে আপনি টেস্ট চলাকালীন সময়ে প্রয়োজনীয় ডেটাবেসের ডেটা সিমুলেট করতে পারেন।
Fixture তৈরি করা
CakePHP তে fixture তৈরি করতে, আপনাকে tests/Fixture/ ডিরেক্টরির মধ্যে একটি PHP ফাইল তৈরি করতে হবে।
উদাহরণস্বরূপ, একটি ArticlesFixture তৈরি করা:
- ArticlesFixture.php:
namespace App\Test\Fixture;
use Cake\TestSuite\Fixture\TestFixture;
class ArticlesFixture extends TestFixture
{
public $fields = [
'id' => ['type' => 'integer', 'null' => false, 'default' => null, 'length' => 11, 'key' => 'primary'],
'title' => ['type' => 'string', 'null' => false],
'body' => ['type' => 'text', 'null' => true],
'created' => ['type' => 'datetime', 'null' => false],
'modified' => ['type' => 'datetime', 'null' => false],
];
public $records = [
[
'title' => 'First Article',
'body' => 'This is the body of the first article.',
'created' => '2024-01-01 10:00:00',
'modified' => '2024-01-01 10:00:00',
],
[
'title' => 'Second Article',
'body' => 'This is the body of the second article.',
'created' => '2024-01-02 12:00:00',
'modified' => '2024-01-02 12:00:00',
],
];
}
এখানে, ArticlesFixture ক্লাসে ডেটাবেসের টেবিলের কাঠামো এবং ডামি ডেটা records অ্যারে হিসেবে রাখা হয়েছে। এই ডামি ডেটা টেস্টের সময় লোড করা হবে।
Test Cases
Test Cases হলো নির্দিষ্ট কার্যক্রম বা ফিচারের পরীক্ষা। CakePHP তে, টেস্টিংয়ের জন্য আপনি PHPUnit ব্যবহার করতে পারেন। PHPUnit হল একটি PHP টেস্টিং ফ্রেমওয়ার্ক যা CakePHP তে ইন্টিগ্রেট করা আছে।
Test Case তৈরি করা
CakePHP তে test case তৈরি করতে আপনাকে tests/TestCase/ ডিরেক্টরিতে একটি ক্লাস তৈরি করতে হবে যা Cake\TestSuite\TestCase থেকে এক্সটেন্ড করবে।
উদাহরণস্বরূপ, ArticlesControllerTest তৈরি করা:
- ArticlesControllerTest.php:
namespace App\Test\TestCase\Controller;
use Cake\TestSuite\IntegrationTestTrait;
use Cake\TestSuite\TestCase;
class ArticlesControllerTest extends TestCase
{
use IntegrationTestTrait;
public $fixtures = ['app.Articles'];
public function testIndex()
{
// Index অ্যাকশনে GET রিকোয়েস্ট পাঠানো
$this->get('/api/articles');
// রেসপন্স চেক করা
$this->assertResponseOk();
// রেসপন্সে 'articles' পাওয়া যাবে কিনা চেক করা
$this->assertResponseContains('First Article');
$this->assertResponseContains('Second Article');
}
public function testView()
{
// View অ্যাকশনে GET রিকোয়েস্ট পাঠানো
$this->get('/api/articles/1');
// রেসপন্স চেক করা
$this->assertResponseOk();
$this->assertResponseContains('First Article');
}
}
এখানে, testIndex() এবং testView() মেথড দুটি পরীক্ষামূলক অ্যাকশন তৈরি করেছে। get() মেথডটি HTTP GET রিকোয়েস্ট পাঠাতে ব্যবহৃত হয়, এবং তারপরে রেসপন্সের জন্য কিছু assertion পরীক্ষা করা হয়, যেমন রেসপন্স স্ট্যাটাস চেক করা, অথবা বিশেষ কিছু কনটেন্ট রেসপন্সে উপস্থিত কিনা চেক করা।
Mocking
Mocking হল টেস্টিংয়ের জন্য এমন একটি কৌশল যেখানে নির্দিষ্ট অংশের আচরণ সিমুলেট করা হয়। এটি এমন কোন অবজেক্ট বা ফাংশন যা আসল অবজেক্টের মত আচরণ করে, কিন্তু আসলে তা ডেটাবেস বা বাহ্যিক সিস্টেমের সাথে যোগাযোগ করেনা। Mocking মূলত নির্দিষ্ট ক্লাস বা মেথডের আচরণ টেস্ট করার জন্য ব্যবহৃত হয়, যা একটি নির্দিষ্ট কাঠামো অনুযায়ী কাজ করে।
Mocking উদাহরণ
CakePHP তে PHPUnit এর সাথে মক অবজেক্ট ব্যবহার করতে পারেন। নিচে একটি মকিংয়ের উদাহরণ দেওয়া হয়েছে:
namespace App\Test\TestCase\Model\Table;
use Cake\TestSuite\TestCase;
use App\Model\Table\ArticlesTable;
use Cake\ORM\TableRegistry;
use PHPUnit\Framework\MockObject\MockObject;
class ArticlesTableTest extends TestCase
{
public $Articles;
public function setUp(): void
{
parent::setUp();
$this->Articles = TableRegistry::getTableLocator()->get('Articles');
}
public function testSaveArticle()
{
// মক অবজেক্ট তৈরি করা
$mock = $this->getMockBuilder('App\Model\Table\ArticlesTable')
->disableOriginalConstructor()
->setMethods(['save'])
->getMock();
// মক save() মেথডের জন্য প্রত্যাশা তৈরি করা
$mock->expects($this->once())
->method('save')
->willReturn(true); // সেভ সফল হলে true রিটার্ন করবে
// এখন, মক অবজেক্টে save() কল করা
$result = $mock->save(new Article());
$this->assertTrue($result);
}
}
এখানে, আমরা ArticlesTable এর জন্য একটি মক অবজেক্ট তৈরি করেছি, যার save() মেথড আমরা টেস্ট করার জন্য সিমুলেট করেছি। মক অবজেক্টটি save() মেথডে প্রত্যাশা এবং রিটার্ন ভ্যালু নির্ধারণ করে এবং তারপরে সেই মেথডটি পরীক্ষিত হয়।
CakePHP তে Fixtures, Test Cases, এবং Mocking ব্যবহার করে আপনি সহজেই অ্যাপ্লিকেশনের কোডের কার্যকারিতা এবং নির্ভরযোগ্যতা পরীক্ষা করতে পারেন। Fixtures দিয়ে আপনি ডামি ডেটা ব্যবহার করে টেস্ট করতে পারেন, Test Cases দিয়ে আপনি বিভিন্ন কন্ট্রোলার বা মডেল অ্যাকশনের কার্যকারিতা পরীক্ষা করতে পারেন, এবং Mocking দিয়ে নির্দিষ্ট ক্লাস বা মেথডের আচরণ সিমুলেট করতে পারেন, যা টেস্টিংয়ের প্রক্রিয়াকে আরও সহজ এবং দ্রুত করে তোলে।
Read more