php mocking phpunit silex

php - Mockery-call_user_func_array() espera que el parámetro 1 sea una devolución de llamada válida



mockery alias (3)

Tengo una clase que necesito para burlarme:

clase MessagePublisher {

/** * @param /PhpAmqpLib/Message/AMQPMessage $msg * @param string $exchange - if not provided then one passed in constructor is used * @param string $routing_key * @param bool $mandatory * @param bool $immediate * @param null $ticket */ public function publish(AMQPMessage $msg, $exchange = "", $routing_key = "", $mandatory = false, $immediate = false, $ticket = null) { if (empty($exchange)) { $exchange = $this->exchangeName; } $this->channel->basic_publish($msg, $exchange, $routing_key, $mandatory, $immediate, $ticket); }

Estoy usando Mockery 0.7.2

$mediaPublisherMock = /Mockery::mock(''MessagePublisher'') ->shouldReceive(''publish'') ->withAnyArgs() ->times(3) ->andReturn(null);

desafortunadamente mis pruebas fallaron, debido a este error

call_user_func_array () espera que el parámetro 1 sea una devolución de llamada válida, la clase ''Mockery / Expectation'' no tiene un método ''publish'' en /vendor/mockery/mockery/library/Mockery/CompositeExpectation.php en la línea 54

He intentado depurar encontré que las pruebas fallan en este código

public function __call($method, array $args) { foreach ($this->_expectations as $expectation) { call_user_func_array(array($expectation, $method), $args); } return $this; }

dónde
$ method = ''publish''
$ args = array ()
$ expectation es una instancia del objeto Mockery / Expectation ()

Estoy usando php 5.3.10 - ¿Alguna idea de lo que está mal?


Creo que $ expectativa debería ser su clase, MessagePublisher


Ok problema resuelto mediante el uso de la biblioteca PhpUnit Mock estándar

Esto funciona:

$mediaPublisherMock = $this->getMock(''Mrok/Model/MessagePublisher'', array(''publish''), array(), '''', false); $mediaPublisherMock->expects($this->once()) ->method(''publish'');

Por qué no comencé de esto;)


Esto está sucediendo porque está asignando una expectativa fingida a $mediaPublisherMock , en lugar de la simulación misma. Intente agregar el método getMock al final de esa llamada, como:

$mediaPublisherMock = /Mockery::mock(''MessagePublisher'') ->shouldReceive(''publish'') ->withAnyArgs() ->times(3) ->andReturn(null) ->getMock();