Sto facendo unit test e in una delle mie classi ho bisogno di inviare una mail da uno dei metodi, quindi usando l'iniezione del costruttore ho iniettato un'istanza di Zend_Mailclasse che si trova nel framework Zend.
Ora alcune persone sostengono che se una biblioteca è abbastanza stabile e non cambierà spesso, non è necessario avvolgerla. Quindi supponendo che Zend_Mailsia stabile e non cambierà e soddisfi completamente le mie esigenze, quindi non avrò bisogno di un involucro per questo.
Ora dai un'occhiata alla mia classe Loggerche dipende da 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
}
}
Tuttavia, il test unitario richiede che io collauda un componente alla volta, quindi devo prendere in giro la Zend_Mailclasse. Inoltre, sto violando il principio di inversione di dipendenza poiché la mia Loggerclasse ora dipende dalla concrezione e non dall'astrazione.
Ora come posso testare Loggerin isolamento senza avvolgere Zend_Mail?!
Il codice è in PHP, ma le risposte non devono essere. Questo è più un problema di progettazione che una caratteristica specifica della lingua