2016-12-21 3 views
1

У меня есть макет сервисного класса. Он определяется как это в моей setUp функцииПроблема с модулем PHPUnit

$this->myServiceMockup = $this->getMockBuilder(MyService::class) 
      ->disableOriginalConstructor() 
      ->setMethods(['myMethod']) 
      ->getMock(); 

В моей тестовой функции я установить ожидание для него, как это.

$this->myServiceMockup->expects($this->once()) 
      ->method('myMethod') 
      ->with($this->exactly(1), 'myName') 
      ->willReturn($this->exactly(1)); 

Так что же это означает, что, когда я должен вызвать функцию MyMethod только один раз, и что он будет возвращать целое число 1.

So метод, который я тестирую имеет эту строку кода.

$myIntValue = $this->myService->myMethod($number, $name); 

После этой линии $myIntValue когда я запустить тест должен быть 1 и испытание должно продолжаться, так что мое понимание по этому вопросу.

Но вместо этого я получаю эту ошибку

не соответствует ожидаемому для имени метода равно когда вызывается 1 раз (а) Параметр 0 для вызова

Мой \ Путь \ К \ Class \ MyService: : myMethod (1, 'myName') не соответствует ожидаемому значению .

1 не соответствует ожидаемому типу «объект».

Не имеет никакого смысла, поскольку myMethod ожидает целое число и строку.

public function myMethod($number, $name) 
{ 
    return $this->table->save($number, $name); 
} 

Может кто-нибудь объяснить мне, что я делаю неправильно здесь, потому что у меня нет идей.

ответ

2

exactly() является граф вызова согласованью (как once() или any()) для использования в качестве аргумента метода expects().

Просто замените:

->with($this->exactly(1), 'myName') 

в

->with(1, 'myName') 

willReturn() также принимает значения "как есть".

2

Вы не используете $this->with правильно.

$this->myServiceMockup 
    ->expects($this->once()) 
    ->method('myMethod') 
    ->with($this->equalTo(1), $this->stringContains('myName')) 
    ->willReturn(1); 
Смежные вопросы