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

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

249

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...