0

我有 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,否则肥皂动作不会反映在 wsdl 之外的“测试”中。在我看来这不好。

我同意它与验收测试有关,而不是单元(我对诸如 之类的类进行测试$server->setClass('classWS')),但无论如何,无论术语如何,我都需要它。

所以,对我有用的是:

new Zend_Soap_Client($wsdl, array('useragent' => 'testing'));

在测试中。

4

1 回答 1

1

这是可能的,但它比仅仅设置一个选项要复杂一些。关键是流上下文。所需的功能是stream_context_create()- 请同时查看“HTTP 上下文选项”

$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);

编辑:

由于流上下文用户代理似乎被覆盖,另一个选项是使用自身的user_agent-option SoapClient。但这有点复杂,因为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

于 2009-10-09T14:26:03.343 回答