Используя 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: средство сопоставления параметров уже определено, не может переопределить "
Что мне делать, чтобы правильно протестировать этот метод.