Birim sınaması yapıyorum ve sınıflarımdan birinde yöntemlerden birinden posta göndermem gerekiyor, bu yüzden yapıcı enjeksiyonunu kullanarak Zend_Mail
Zend çerçevesindeki sınıf örneğini enjekte ediyorum .
Şimdi bazı insanlar bir kütüphane yeterince kararlıysa ve sık sık değişmeyecekse, onu sarmaya gerek olmadığını savunuyorlar. Bu nedenle Zend_Mail
, istikrarlı olduğunu ve değişmeyeceğini ve ihtiyaçlarıma tamamen uyduğunu varsayarsak, bunun için bir sargıya ihtiyacım olmayacak.
Şimdi aşağıdakilere Logger
bağlı olan dersime göz atın 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
}
}
Ancak, Birim testi bir kerede bir bileşeni test etmemi gerektiriyor, bu yüzden Zend_Mail
sınıfı taklit etmem gerekiyor . Ayrıca, sınıfım şimdi soyutlamaya değil, somutlaşmaya bağlı olduğu için Bağımlılık Tersine Çevirme ilkesini ihlal ediyorum Logger
.
Şimdi Logger
sarmadan izole olarak nasıl test edebilirim Zend_Mail
?!
Kod PHP'dir, ancak yanıtların olması gerekmez. Bu, dile özgü bir özellikten ziyade bir tasarım sorunudur