tutorial soapclient soapcall example php web-services soap wsdl phpunit

soapcall - Phpunit, burlarse de SoapClient es problemático(métodos mágicos falsos)



soapclient php parameters (3)

Estoy tratando de burlar SoapClient con el siguiente código:

$soapClientMock = $this->getMockBuilder(''SoapClient'') ->disableOriginalConstructor() ->getMock(); $soapClientMock->method(''getAuthenticateServiceSettings'') ->willReturn(true);

Esto no funcionará, ya que Phpunit mockbuilder no encuentra la función getAuthenticateServiceSettings. Esta es una función de Soap especificada en el WSDL.

Sin embargo, si extiendo la clase SoapClient y el método getAuthenticateServiceSettings, funciona.

El problema es que tengo cientos de llamadas SOAP, todas con sus propios parámetros, etc., así que no quiero burlarme de cada función SOAP y recrear más o menos todo el archivo WSDL ...

¿Hay alguna manera de burlarse de los métodos "mágicos"?


Por lo general, no trabajo directamente con la clase / SoapClient, sino que utilizo una clase Client que usa SoapClient. Por ejemplo:

class Client { /** * @var SoapClient */ protected $soapClient; public function __construct(SoapClient $soapClient) { $this->soapClient = $soapClient; } public function getAuthenticateServiceSettings() { return $this->soapClient->getAuthenticateServiceSettings(); } }

De esta manera es más fácil burlarse de la clase Client, que burlarse de SoapClient.



No pude usar getMockFromWsdl para un escenario de prueba, así que me __call método __call que se llama en segundo plano:

$soapClient = $this->getMockBuilder(SoapClient::class) ->disableOriginalConstructor() ->getMock(); $soapClient->expects($this->any()) ->method(''__call'') ->willReturnCallback(function ($methodName) { if (''methodFoo'' === $methodName) { return ''Foo''; } if (''methodBar'' === $methodName) { return ''Bar''; } return null; });

PD: Intenté usar __soapCall primero porque __call está en desuso, pero eso no funcionó.