Usando PHPUnit, me pregunto si podemos simular un objeto para probar si se llama a un método con un parámetro esperado, y ¿un valor devuelto?PHPunit: Cómo simular un método que tiene un parámetro Y un valor devuelto
En el doc, hay ejemplos con el paso de parámetros, o el valor devuelto, pero no tanto ...
He intentado utilizar esto:
// My object to test $hoard = new Hoard(); // Mock objects used as parameters $item = $this->getMock('Item'); $user = $this->getMock('User', array('removeItem')); ... $user->expects($this->once()) ->method('removeItem') ->with($this->equalTo($item)); $this->assertTrue($hoard->removeItemFromUser($item, $user));
Mi aserción falla porque Tesoro :: removeItemFromUser() debería devolver el valor devuelto de User :: removeItem(), que es verdadero.
$user->expects($this->once()) ->method('removeItem') ->with($this->equalTo($item), $this->returnValue(true)); $this->assertTrue($hoard->removeItemFromUser($item, $user));
también falla con el siguiente mensaje: "recuento de parámetros para la invocación del usuario :: removeItem (Mock_Item_767aa2db objeto (...)) es demasiado bajo."
$user->expects($this->once()) ->method('removeItem') ->with($this->equalTo($item)) ->with($this->returnValue(true)); $this->assertTrue($hoard->removeItemFromUser($item, $user));
También se produce el mensaje siguiente: "PHPUnit_Framework_Exception: el parámetro matcher ya está definido, no puede redefinir"
¿Qué debo hacer para probar este método correctamente?