Pergunta

Eu tenho zend_soap_server. Deve ser testado. Um problema - os modos de teste e desenvolvimento de unidades devem funcionar com diferentes bancos de dados. Isso pode ser feito via .htaccess:

SetEnvIfNoCase User-Agent (.*) APPLICATION_ENV=development
SetEnvIfNoCase User-Agent testing APPLICATION_ENV=testing

Funcionaria bem para mim, eu uso o Zend_soap_client como é para o modo de desenvolvimento/produção e adiciono parâmetro extra para teste. Não há mudanças especiais no código -fonte para o suporte ao teste. O problema - não posso definir o agente de usuário personalizado para (Zend_soap_clientParece que esse parâmetro não é suportado ou não está documentado. Eu tentei fazer a mesma coisa via mod_rewrite e adicionando

new Zend_Soap_Client('...?wsdl&testing');

Mas é necessário alterar o zend_soap_server para suportar o teste de query_string, caso contrário, as ações de sabão não serão refletidas com o 'teste' fora do WSDL. Não é bom na minha opinião.

Concordo que está um pouco mais relacionado com testes de aceitação, não unidade (tenho testes para classes como $server->setClass('classWS')), mas de qualquer maneira, preciso disso, independentemente da terminologia.

Então, o que funcionaria bem para mim é algo como:

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

em testes.

Foi útil?

Solução

É possível, mas é um pouco mais complicado do que apenas definir uma opção. A chave é um contexto de fluxo. A função necessária é stream_context_create() - Por favor, também dê uma olhada "Opções de contexto 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);

EDITAR:

Como o agente de usuário do contexto do fluxo parece ser substituído, outra opção é usar o user_agent-eption of SoapClient em si. Mas isso é um pouco mais complicado, pois esta opção não é exposta por 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);

O código acima é mais ou menos um extrato do que acontece em Zend_Soap_Client::_initSoapClientObject() que inicializa o padrão SoapClient Quando nenhum objeto personalizado é registrado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top