Utilizzando PHPUnit, mi chiedo se possiamo prendere in giro un oggetto per verificare se un metodo viene chiamato con un parametro previsto, e un valore restituito?PHPunit: Come simulare un metodo che ha un parametro E un valore restituito
Nel doc, ci sono esempi con il passaggio di parametri, o valore restituito, ma non sia ...
Ho provato ad utilizzare questo:
// 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));
mia asserzione fallisce perché Hoard :: removeItemFromUser() dovrebbe restituire il valore restituito di User :: removeItem(), che è true.
$user->expects($this->once()) ->method('removeItem') ->with($this->equalTo($item), $this->returnValue(true)); $this->assertTrue($hoard->removeItemFromUser($item, $user));
inoltre non riesce con il seguente messaggio: "count dei parametri per l'invocazione d'uso :: removeItem (Mock_Item_767aa2db Object (...)) è troppo bassa."
$user->expects($this->once()) ->method('removeItem') ->with($this->equalTo($item)) ->with($this->returnValue(true)); $this->assertTrue($hoard->removeItemFromUser($item, $user));
fallisce anche con il seguente messaggio: "PHPUnit_Framework_Exception: Parameter matcher è già definito, non può ridefinire"
Cosa devo fare per verificare correttamente questo metodo.