PHPunit: Как имитировать метод, который имеет параметр И возвращаемое значение

Используя PHPUnit, мне интересно, можем ли мы имитировать объект, чтобы проверить, вызывается ли метод с ожидаемым параметром, и a возвращаемое значение?

В документе есть примеры с передаваемым параметром или возвращаемым значением, но не оба ...

Я пробовал использовать это:

// 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: средство сопоставления параметров уже определено, не может переопределить "

Что мне делать, чтобы правильно протестировать этот метод.

13
задан k0pernikus 13 May 2015 в 23:36
поделиться