Используя PHPUnit, мне интересно, можем ли мы смоделировать объект, чтобы проверить, вызывается ли метод с ожидаемым параметром, и возвращаемое значение?
В документ есть примеры с передачей параметра или возвращаемого значения, но не оба ...
Я пытался использовать это:
// 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));
Мое утверждение не выполняется , поскольку Hoard :: removeItemFromUser () должен возвращать возвращаемое значение User :: removeItem (), которое является истинным.
$user->expects($this->once())
->method('removeItem')
->with($this->equalTo($item), $this->returnValue(true));
$this->assertTrue($hoard->removeItemFromUser($item, $user));
Также происходит сбой со следующим сообщением: « Количество параметров для вызова User :: removeItem (Mock_Item_767aa2db Object (...)) слишком мало. "
$user->expects($this->once())
->method('removeItem')
->with($this->equalTo($item))
->with($this->returnValue(true));
$this->assertTrue($hoard->removeItemFromUser($item, $user));
Также происходит сбой со следующим сообщением: « PHPUnit_Framework_Exception: сопоставитель параметров уже определен, не может переопределить »
Что я должен сделать, чтобы проверить этот метод правильно.