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_Mail
classe 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_Mail
sia 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 Logger
che 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_Mail
classe. Inoltre, sto violando il principio di inversione di dipendenza poiché la mia Logger
classe ora dipende dalla concrezione e non dall'astrazione.
Ora come posso testare Logger
in 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