我有Zend_Soap_Server。它应该进行测试。一个问题 - 单元测试和开发模式应该适用于不同的数据库。它可以通过.htaccess:
完成SetEnvIfNoCase User-Agent (.*) APPLICATION_ENV=development
SetEnvIfNoCase User-Agent testing APPLICATION_ENV=testing
它对我来说很好,我使用Zend_Soap_Client作为开发/生产模式,并添加额外的参数进行测试。测试支持的源代码没有特殊更改。 问题 - 我无法为(Zend_Soap_Client设置自定义用户代理 似乎不支持此参数或未记录此参数。 我尝试通过mod_rewrite和添加
做同样的事情new Zend_Soap_Client('...?wsdl&testing');
但它需要更改Zend_Soap_Server以支持测试Query_String,否则soap-actions不会在wsdl之外的'testing'中反映出来。在我看来这不好。
我同意它与验收测试有点相关,而不是单位(我对$server->setClass('classWS')
等类进行了测试),但无论如何,无论术语如何,我都需要它。
那么,对我来说可行的方法就像:
new Zend_Soap_Client($wsdl, array('useragent' => 'testing'));
在测试中。
答案 0 :(得分:2)
这是可能的,但它比设置一个选项更复杂。关键是流上下文。所需的功能是stream_context_create()
- 请同时查看"HTTP context options"。
$context = stream_context_create(array(
'http' => array(
'user_agent' => 'testing'
)
);
$client = new Zend_Soap_Client($wsdl, array('stream_context' => $context));
// or set option after instatiation
$client->setStreamContext($context);
修改强>
由于流上下文用户代理似乎被覆盖,另一个选项是使用SoapClient
本身的user_agent
- 选项。但这有点复杂,因为Zend_Soap_Client
没有公开此选项。
$client = new Zend_Soap_Client($wsdl);
$options = array_merge($client->getOptions(), array(
'trace' => true,
'user_agent' => 'testing'
));
$soapClient = new Zend_Soap_Client_Common(array($client, '_doRequest'), $wsdl, $options);
$client->setSoapClient($soapClient);
上面的代码或多或少是Zend_Soap_Client::_initSoapClientObject()
中发生的事情的摘录,它在没有注册自定义对象时初始化默认SoapClient
。