0

Zend_Soap_Serverがあります。テストする必要があります。1つの問題-単体テストと開発モードは、異なるデータベースで機能する必要があります。.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');

ただし、Query_StringのテストをサポートするようにZend_Soap_Serverを変更する必要があります。そうしないと、soapアクションがwsdlの外部の「testing」に反映されません。私の意見では良くありません。

ユニットではなく、受け入れテストにもう少し関連していることに同意します(私はなどのクラスのテストがあります$server->setClass('classWS'))が、とにかく、用語に関係なく必要です。

だから、私にとってうまくいくのは次のようなものです:

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

テストで。

4

1 に答える 1

1

可能ですが、オプションを設定するよりも少し複雑です。キーはストリームコンテキストです。必要な機能は- 「HTTPコンテキストオプション」stream_context_create()もご覧ください。

$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がオーバーライドされるように見えるため、別のオプションはそれ自体の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 に答える