PHPUnit несколько смоделированных методов с тем же именем - PullRequest
1 голос
/ 28 февраля 2012

Мне интересно, как пройти тестирование. Скажем, у меня есть метод получения, и я меняю значение в процессе метода. Вот простой пример:

public function foo($model)
{
  var_dump($model->state());
  $model->state('saved');
  var_dump($model->state());
}

Я издеваюсь над моделью так:

$model = $this->getMock('Model');
$model->expects($this->any))
  ->method('state')
  ->will($this->returnValue('new'));

Как настроить макет так, чтобы второй вызов возвращал другое значение (сохранено)?

Ответы [ 2 ]

3 голосов
/ 28 февраля 2012

С Mockery , который интегрируется с PHPUnit, но является намного превосходящей библиотекой насмешек, вы могли бы написать это так:

$model = m::mock('model');
$model->shouldReceive('state')->andReturn($returnValue, $differentReturnValue);

Очевидно, насколько красивее API Mockery. Это ода читаемому коду. Читается как текст ...

модель должна получать состояние и возвращаемые значения

Вы можете добавить ограничение, что метод должен вызываться ровно дважды, например:

$model->shouldReceive('state')->twice()->andReturn($value, $differentValue);

Если вы хотите передать аргументы, это выглядит так:

$model->shouldReceive('state')->withNoArgs()->andReturn($value)->once();
$model->shouldReceive('state')->with('saved')->andReturn($differentValue)->once();
3 голосов
/ 28 февраля 2012
$model = $this->getMock('Model');
$model->expects($this->at(0))
  ->method('state')
  ->will($this->returnValue('new'));
$model->expects($this->at(1))
  ->method('state')
  ->will($this->returnValue('saved'));
$model->expects($this->exactly(2))
  ->method('state');

http://www.phpunit.de/manual/3.6/en/test-doubles.html#test-doubles.mock-objects

Кроме того, вы можете дополнительно проверить с помощью with(), что переданный параметр равен saved

->with($this->equalTo('saved'))

PS: это будет работать для

public function foo($model)
{
  var_dump($model->state());
  var_dump($model->state('saved'));
}

Для вашего кода вам нужно установить 3 ложных звонка, а не 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...