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_Mail
Klasse 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_Mail
ist 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_Mail
Klasse lustig machen muss . Außerdem verstoße ich gegen das Prinzip der Abhängigkeitsinversion , da meine Logger
Klasse jetzt von Konkretion und nicht von Abstraktion abhängt.
Wie kann ich nun Logger
isoliert 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