আমি কীভাবে পিএইচপিউনিট দিয়ে বিমূর্ত শ্রেণীর কংক্রিট পদ্ধতিগুলি পরীক্ষা করব?
আমি আশা করতাম যে পরীক্ষার অংশ হিসাবে আমাকে কোনও ধরণের অবজেক্ট তৈরি করতে হবে। যদিও, আমি এর জন্য সেরা অনুশীলন সম্পর্কে ধারণা করি না বা যদি পিএইচপিউনিট এটির অনুমতি দেয়।
আমি কীভাবে পিএইচপিউনিট দিয়ে বিমূর্ত শ্রেণীর কংক্রিট পদ্ধতিগুলি পরীক্ষা করব?
আমি আশা করতাম যে পরীক্ষার অংশ হিসাবে আমাকে কোনও ধরণের অবজেক্ট তৈরি করতে হবে। যদিও, আমি এর জন্য সেরা অনুশীলন সম্পর্কে ধারণা করি না বা যদি পিএইচপিউনিট এটির অনুমতি দেয়।
উত্তর:
অ্যাবস্ট্রাক্ট ক্লাসগুলির ইউনিট টেস্টিংয়ের অর্থ ইন্টারফেসটি পরীক্ষা করা প্রয়োজন হয় না, কারণ অ্যাবস্ট্রাক্ট ক্লাসগুলিতে কংক্রিটের পদ্ধতি থাকতে পারে এবং এই কংক্রিটের পদ্ধতিগুলি পরীক্ষা করা যেতে পারে।
কিছু গ্রন্থাগার কোড লেখার সময় এটি এমন সাধারণ বিষয় নয় যে আপনি আপনার অ্যাপ্লিকেশন স্তরে প্রসারিত হওয়ার প্রত্যাশা করতে পারেন base এবং আপনি যদি নিশ্চিত করতে চান যে লাইব্রেরি কোডটি পরীক্ষা করা হয়েছে, আপনার বিমূর্ত ক্লাসগুলির কংক্রিট পদ্ধতিগুলি ইউটি করা দরকার।
ব্যক্তিগতভাবে, আমি পিএইচপিউইনিত ব্যবহার করি এবং এটি আপনাকে এ জাতীয় জিনিস পরীক্ষায় সহায়তা করতে স্টাবস এবং মক অবজেক্টস বলে।
পিএইচপিউনিট ম্যানুয়াল থেকে সোজা :
abstract class AbstractClass
{
public function concreteMethod()
{
return $this->abstractMethod();
}
public abstract function abstractMethod();
}
class AbstractClassTest extends PHPUnit_Framework_TestCase
{
public function testConcreteMethod()
{
$stub = $this->getMockForAbstractClass('AbstractClass');
$stub->expects($this->any())
->method('abstractMethod')
->will($this->returnValue(TRUE));
$this->assertTrue($stub->concreteMethod());
}
}
মক অবজেক্ট আপনাকে বেশ কয়েকটি জিনিস দেয়:
এটা একটা ভালো প্রশ্ন. আমি এটিও খুঁজছিলাম
ভাগ্যক্রমে, পিএইচপিউইনেটের ইতিমধ্যে getMockForAbstractClass()
এই ক্ষেত্রে পদ্ধতি রয়েছে
protected function setUp()
{
$stub = $this->getMockForAbstractClass('Some_Abstract_Class');
$this->_object = $stub;
}
নোট করুন যে এর জন্য PHPUnit> 3.5.4.4 প্রয়োজন। পূর্ববর্তী সংস্করণগুলিতে একটি বাগ ছিল ।
নতুন সংস্করণে আপগ্রেড করতে:
sudo pear channel-update pear.phpunit.de
sudo pear upgrade phpunit/PHPUnit
এটি উল্লেখ্য করা উচিত যে পিএইচপি হিসাবে 7 বেনাম শ্রেণীর জন্য সমর্থন যুক্ত করা হয়েছে। এটি আপনাকে একটি বিমূর্ত শ্রেণীর জন্য একটি পরীক্ষা স্থাপনের জন্য একটি অতিরিক্ত অ্যাভিনিউ দেয় যা PHPUnit- নির্দিষ্ট কার্যকারিতার উপর নির্ভর করে না।
class AbstractClassTest extends \PHPUnit_Framework_TestCase
{
/**
* @var AbstractClass
*/
private $testedClass;
public function setUp()
{
$this->testedClass = new class extends AbstractClass {
protected function abstractMethod()
{
// Put a barebones implementation here
}
};
}
// Put your tests here
}
ইরান, আপনার পদ্ধতিটি কাজ করা উচিত, তবে এটি আসল কোডের আগে পরীক্ষা লেখার প্রবণতার বিরুদ্ধে যায়।
আমি যা পরামর্শ দেব তা হ'ল প্রশ্নে বিমূর্ত শ্রেণীর একটি নন-অ্যাবস্ট্রাক্ট সাবক্লাসের কাঙ্ক্ষিত কার্যকারিতা সম্পর্কে আপনার পরীক্ষাগুলি লিখুন, তারপরে বিমূর্ত শ্রেণি এবং বাস্তবায়নকারী সাবক্লাস উভয়ই লিখুন এবং শেষ পর্যন্ত পরীক্ষাটি চালান।
আপনার পরীক্ষাগুলি স্পষ্টত বিমূর্ত শ্রেণীর সংজ্ঞায়িত পদ্ধতিগুলি পরীক্ষা করা উচিত, তবে সর্বদা সাবক্লাসের মাধ্যমে।
নেলসনের উত্তরটি ভুল।
বিমূর্ত শ্রেণীর জন্য তাদের সমস্ত পদ্ধতি বিমূর্ত হতে হবে না।
বাস্তবায়িত পদ্ধতিগুলি আমাদের যা পরীক্ষা করতে হবে।
আপনি যা করতে পারেন তা হ'ল ইউনিট টেস্ট ফাইলটিতে একটি নকল স্টাব ক্লাস তৈরি করা, এটি বিমূর্ত শ্রেণীর প্রসারিত করুন এবং কেবল কোনও কার্যকারিতা ছাড়াই প্রয়োজনীয় যা প্রয়োজন তা অবশ্যই প্রয়োগ করুন এবং এটি পরীক্ষা করুন।
চিয়ার্স।