单元测试的可选依赖注入

时间:2011-01-21 20:37:59

标签: unit-testing dependency-injection

我正在考虑为单元测试设置课程的选择。在正常情况下,此特定类应始终使用相同的soap客户端配置。我觉得这个类的用户不需要关心在使用它时设置一个soap客户端。或者,即使意识到它根本使用肥皂。

唯一的例外是单元测试。我需要能够模拟Soap_Client。我提出了以下方法,我在构造函数中创建soap客户端,并可以选择使用setSoapClient()进行设置。

class WebServiceLayer
{
    const WSDL_URL = 'https://www.example.com/?WSDL';

    private $soapClient;

    public function __construct()
    {
        $this->soapClient = new Soap_Client(self::WSDL_URL);
    }

    public function setSoapClient(Soap_Client $soapClient)
    {
        $this->soapClient = $soapClient;
    }

    public function fetchSomeResponse()
    {
        $soapClient = $this->soapClient;
        return $soapClient->someRequest();
    }
}

这是处理此问题的有效方法吗?我用它看到的唯一问题是,我在构造函数中实例化客户端“我听说过”是要避免的。

我之前在其他课程上遇到过这种困境,所以得到人们的意见真是太好了。

1 个答案:

答案 0 :(得分:2)

对我来说很好......你正在使用标准的Setter注射。唯一奇怪的是在Getter中返回一个新客户端。如果没有注入,为什么不返回null?