我正在考虑为单元测试设置课程的选择。在正常情况下,此特定类应始终使用相同的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();
}
}
这是处理此问题的有效方法吗?我用它看到的唯一问题是,我在构造函数中实例化客户端“我听说过”是要避免的。
我之前在其他课程上遇到过这种困境,所以得到人们的意见真是太好了。
答案 0 :(得分:2)
对我来说很好......你正在使用标准的Setter注射。唯一奇怪的是在Getter中返回一个新客户端。如果没有注入,为什么不返回null?