1
包装第三方代码是否是对用户进行单元测试的唯一解决方案?
我正在进行单元测试,并且在我的一个类中,我需要从一种方法中发送邮件,因此使用构造函数注入,我将注入Zend_MailZend框架中的类的实例。 现在有人认为,如果一个库足够稳定并且不会经常更改,那么就无需对其进行包装。因此,假设这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中,但不一定必须提供答案。这更多的是设计问题,而不是特定于语言的功能