我正在进行单元测试,并且在我的一个类中,我需要从一种方法中发送邮件,因此使用构造函数注入,我将注入Zend_Mail
Zend框架中的类的实例。
现在有人认为,如果一个库足够稳定并且不会经常更改,那么就无需对其进行包装。因此,假设这Zend_Mail
是稳定的并且不会改变并且完全满足我的需求,那么我就不需要包装器了。
现在看一下我的课程Logger
,该课程取决于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
}
}
但是,单元测试要求我一次测试一个组件,因此我需要模拟Zend_Mail
该类。另外,我违反了依赖倒置原则,因为我的Logger
课程现在依赖于具体而非抽象。
现在,我如何Logger
在不进行包装的情况下进行隔离测试Zend_Mail
?
该代码在PHP中,但不一定必须提供答案。这更多的是设计问题,而不是特定于语言的功能
您必须使用界面吗?PHP不支持鸭子输入吗?
—
凯文·克莱恩
@kevincline好,我使用了PHP,因为它是我使用最多的语言,但是我实际上是在寻找一种通用的解决方案,不仅限于PHP。
—
Songo 2012年