আমি ইউনিট টেস্টিং করছি এবং আমার ক্লাসগুলির একটিতে আমাকে একটি পদ্ধতি থেকে একটি মেইল প্রেরণ করা প্রয়োজন, তাই কনস্ট্রাক্টর ইঞ্জেকশন ব্যবহার করে আমি Zend_Mail
ক্লাসের একটি উদাহরণ ইনজেক্ট করি যা জেন্ড ফ্রেমওয়ার্কে রয়েছে।
এখন কিছু লোক যুক্তি দেখান যে কোনও লাইব্রেরি যদি পর্যাপ্ত স্থিতিশীল থাকে এবং প্রায়শই পরিবর্তন হয় না তবে এটি মোড়ানো দরকার নেই is সুতরাং ধরে Zend_Mail
নিচ্ছি যে এটি স্থিতিশীল এবং পরিবর্তিত হবে না এবং এটি আমার প্রয়োজনগুলি পুরোপুরি ফিট করে, তবে এর জন্য আমার একটি মোড়কের দরকার হবে না।
এখন আমার ক্লাসটি দেখুন Logger
যা নির্ভর করে Zend_Mail
:
class Logger{
private $mailer;
function __construct(Zend_Mail $mail){
$this->mail=$mail;
}
function toBeTestedFunction(){
//Some code
$this->mail->setTo('some value');
$this->mail->setSubject('some value');
$this->mail->setBody('some value');
$this->mail->send();
//Some
}
}
যাইহোক, ইউনিট পরীক্ষাটি দাবি করে যে আমি একবারে একটি উপাদান পরীক্ষা করি, তাই আমার Zend_Mail
ক্লাসটি উপহাস করা উচিত । এছাড়াও আমি নির্ভরতা ইনভার্সন নীতি লঙ্ঘন করছি কারণ আমার Logger
ক্লাসটি এখন বিমূর্ততা নয় কনক্রিটেশন উপর নির্ভর করে।
এখন Logger
মোড়কে না রেখে আমি কীভাবে বিচ্ছিন্নতায় পরীক্ষা করতে পারি Zend_Mail
?!
কোডটি পিএইচপিতে রয়েছে, তবে উত্তরগুলি থাকা দরকার নেই। এটি একটি ভাষা নির্দিষ্ট বৈশিষ্ট্যের চেয়ে একটি ডিজাইনের সমস্যা