Я роблю тестування одиниць, і в одному з моїх класів мені потрібно надіслати пошту одним із методів, тому за допомогою конструкторської ін'єкції я ввожу екземпляр Zend_Mail
класу, який знаходиться в рамках Zend.
Зараз деякі люди стверджують, що якщо бібліотека є достатньо стабільною і не змінюватиметься часто, то не потрібно її переробляти. Тож якщо припустити, що 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
}
}
Однак тестування Unit вимагає тестування одного компонента за раз, тому мені потрібно знущатися над Zend_Mail
класом. Крім того, я порушую принцип інверсії залежності, оскільки Logger
тепер мій клас залежить від конкременту, а не від абстракції.
Тепер як я можу випробувати Logger
ізоляцію без загортання Zend_Mail
?!
Код є в PHP, але відповіді не повинні бути. Це скоріше питання дизайну, ніж особливості мови