Sto facendo test unitari e in una delle mie classi ho bisogno di inviare una mail da uno dei metodi, quindi usando il constructor injection I inietto un'istanza di Zend_Mail
class che è nel framework Zend.
Ora alcune persone sostengono che se una libreria è abbastanza stabile e non cambierà spesso, non è necessario avvolgerla. Quindi supponendo che Zend_Mail
sia stabile e non cambierà e si adatta perfettamente alle mie esigenze, allora non avrò bisogno di un wrapper
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 delle unità richiede di testare un componente alla volta, quindi devo prendere in giro la classe Zend_Mail
. Inoltre sto violando il principio Dependency Inversion poiché la mia classe Logger
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. Si tratta più di un problema di progettazione rispetto a una funzione specifica della lingua