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