【发布时间】:2011-01-21 20:37:58
【问题描述】:
我正在考虑设置单元测试类的选项。在正常情况下,这个特定的类应该总是使用相同的soap客户端配置。我觉得该课程的用户在使用肥皂客户端时不需要关心它的设置。或者,甚至要知道它完全使用肥皂。
真正唯一的例外是在单元测试中。我需要能够模拟 Soap_Client。我想出了以下方法,我在构造函数中创建了肥皂客户端,并且可以选择使用 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();
}
}
这是处理此问题的有效方法吗?我看到的唯一问题是,我在构造函数中实例化客户端,“我听说过”是要避免的。
我以前在其他课程上也遇到过这种困境,所以很高兴能得到人们对此的意见。
【问题讨论】:
-
修改了示例,使客户端在构造函数中创建,而不是延迟加载。
标签: unit-testing dependency-injection