Как смоделировать свойство класса в тестах Laravel - PullRequest
0 голосов
/ 03 сентября 2018

Я использую класс ZipArchive в моем приложении laravel 5.6 для работы с zip-файлами. В своих тестах я создал макет для класса ZipArchive следующим образом:

$this->zipArchiveMock = $this->createMock(ZipArchive::class);

Я могу смоделировать методы в классе ZipArchive следующим образом:

$this->zipArchiveMock->expects($this->once())
            ->method('open')
            ->will($this->returnValue(true));

Я хочу смоделировать свойство с именем numFiles класса ZipArchive. Я пытался сделать $this->zipArchiveMock->numFiles = 2. Но $this->zipArchiveMock->numFiles всегда равно 0. Как смоделировать свойство в классе ZipArchive?

Спасибо

1 Ответ

0 голосов
/ 03 сентября 2018

Хорошо, так что есть 2 варианта, вы можете смоделировать публичное свойство с помощью Mockery или смоделировать функцию count().

$this->zipArchiveMock->set('numFiles', 2);

(Я не знаю, используете ли вы Mockery, но он включен в Laravel, поэтому я предположил, что вы это сделали) http://docs.mockery.io/en/latest/reference/public_properties.html

Или:

$this->zipArchiveMock->expects($this->once())
    ->method('count')
    ->will($this->returnValue(2));

EDIT:

Вы используете не Mockery, а PHPunit. Я не могу найти способ макетировать свойства объекта или установить свойства макета с помощью PHPUnit. Вместо этого я предлагаю вам использовать Mockery следующим образом:

$this->zipArchiveMock = \Mockery::mock('ZipArchive');
$this->zipArchiveMock->set('numFiles', 2);

$this->zipArchiveMock->shouldReceive('open')
        ->once()
        ->andReturn(true);

Надеюсь, это работает для вас.

...