Saya sedang melakukan pengujian unit dan di salah satu kelas saya, saya perlu mengirim email dari salah satu metode, jadi menggunakan injeksi konstruktor saya menyuntikkan contoh Zend_Mail
kelas yang ada di kerangka Zend.
Sekarang beberapa orang berpendapat bahwa jika perpustakaan cukup stabil dan tidak akan sering berubah maka tidak perlu membungkusnya. Jadi dengan asumsi itu Zend_Mail
stabil dan tidak akan berubah dan itu sesuai dengan kebutuhan saya sepenuhnya, maka saya tidak akan memerlukan pembungkus untuk itu.
Sekarang lihat kelas saya Logger
yang tergantung pada 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
}
}
Namun, pengujian Unit menuntut saya menguji satu komponen pada satu waktu, jadi saya perlu mengejek Zend_Mail
kelas. Selain itu saya melanggar prinsip Ketergantungan Pembalikan karena Logger
kelas saya sekarang tergantung pada konkret bukan abstraksi.
Sekarang bagaimana saya bisa menguji Logger
dalam isolasi tanpa pembungkus Zend_Mail
?!
Kode ini dalam PHP, tetapi jawabannya tidak harus. Ini lebih merupakan masalah desain daripada fitur khusus bahasa