Свойство MockObject очищается после конструктора - PullRequest
0 голосов
/ 05 декабря 2018

Привет, ребята, сейчас я пишу тест для функции внутри класса в моем проекте.

function theTestFunction()
{
  $companyMock = $this->createMock(Company::class);
  $companyMock->method('getUser')->willReturn(new User());
  $companyMock->method('isActive')->willReturn(false);
  $companyMock->expects($this->once())->method('setActive')->with(true)->willReturn($companyMock);

  $manager = $this->getMockBuilder(CompanyManager::class)
    ->setMethods(['updateNewsletter'])
    ->setConstructorArgs([$companyMock])
    ->getMock();
  $manager->expects($this->once())->method('updateNewsletter');
  $manager->switchActivation();
}

Но я не понимаю, почему мой метод с заглушкой getUser() (вызывается в updateNewsletter()) возвращает ноль, когда я запускаю исходную функцию switchActivation(), что-то вроде этого

function switchActivation() : Company
{
    $this->company = $this->company->setActive(!$this->company->isActive());
    $this->company->save();
    $this->updateNewsletter();

    return $this->company;
}

Эта функция не прошла тест

function updateNewsletter()
{
  $user = $this->company->getUser();
  // Do some other stuff...
}

1 Ответ

0 голосов
/ 05 декабря 2018

вместо

->willReturn($companyMock)

используйте

->will($this->returnSelf())

Ср.https://phpunit.readthedocs.io/en/7.4/test-doubles.html#test-doubles-stubs-examples-stubtest4-php

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