Tôi đang thực hiện kiểm thử đơn vị và trong một trong các lớp của mình, tôi cần gửi thư từ một trong các phương thức, vì vậy, bằng cách sử dụng hàm tạo, tôi tiêm một thể hiện của Zend_Mail
lớp trong khung Zend.
Bây giờ một số người lập luận rằng nếu một thư viện đủ ổn định và sẽ không thay đổi thường xuyên thì không cần phải bọc nó. Vì vậy, giả sử rằng Zend_Mail
nó ổn định và sẽ không thay đổi và nó hoàn toàn phù hợp với nhu cầu của tôi, thì tôi sẽ không cần một trình bao bọc cho nó.
Bây giờ hãy xem lớp học của tôi Logger
phụ thuộc vào 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
}
}
Tuy nhiên, kiểm thử đơn vị yêu cầu tôi kiểm tra một thành phần tại một thời điểm, vì vậy tôi cần phải chế nhạo Zend_Mail
lớp. Ngoài ra, tôi đang vi phạm nguyên tắc Nghịch đảo phụ thuộc vì Logger
lớp của tôi bây giờ phụ thuộc vào sự không lắng đọng.
Bây giờ làm thế nào tôi có thể kiểm tra Logger
trong sự cô lập mà không gói Zend_Mail
?!
Mã này là trong PHP, nhưng câu trả lời không phải là. Đây là một vấn đề thiết kế hơn là một tính năng cụ thể của ngôn ngữ