Ich mache Unit-Tests und in einer meiner Klassen muss ich eine Mail von einer der Methoden senden, also füge ich mit Hilfe der Konstruktorinjektion eine Instanz der Zend_MailKlasse ein, die im Zend-Framework ist.
Nun argumentieren einige Leute, wenn eine Bibliothek stabil genug ist und sich nicht oft ändert, besteht keine Notwendigkeit, sie zu verpacken. Vorausgesetzt, das Zend_Mailist stabil und ändert sich nicht und es passt sich meinen Bedürfnissen an, dann brauche ich keinen Wrapper dafür.
Schauen Sie sich jetzt meine Klasse an Logger, die davon abhängt 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
}
}
Beim Unit-Test muss jedoch jeweils eine Komponente getestet werden, sodass ich mich über die Zend_MailKlasse lustig machen muss . Außerdem verstoße ich gegen das Prinzip der Abhängigkeitsinversion , da meine LoggerKlasse jetzt von Konkretion und nicht von Abstraktion abhängt.
Wie kann ich nun Loggerisoliert testen, ohne zu verpacken Zend_Mail?
Der Code ist in PHP, aber Antworten müssen nicht sein. Dies ist eher ein Designproblem als eine sprachspezifische Funktion