PHPUnit. Как глобально замокать метод класса?

180
22 июля 2019, 18:30

Имеется два класса. В классе Two создаем экземпляр класса One в переменную $one.

class One 
{
   public function getOne()
   {
       return 1;
   }
}
class Two 
{
   public function getOnePlusTwo()
   {
       $one = new One();
       return $one->getOne() + 2;
   }
}

Тест, в котором подменяю возвращаемое значение метода getOne на 2. Ожидаю 4. Но при запуске теста метод getOne все равно возвращает 1, то есть getMockBuilder никак не влияет глобально на метод, всего лишь делает копию и орудует ей

public function testGetOnePlusTwo()
{
    $mock = $this->getMockBuilder(One::class)
                 ->getMock();
    $mock->method('getOne')
         ->willReturn(2);
    $two = new Two();
    $this->assertEquals(4, $two->getOnePlusTwo());
}

При вызове $mock->getOne возвращается 2, все правильно. но при запуске теста getOne возвращает 1.
Не понимаю как замокать метод класса getOne в функции getOnePlusTwo, чтобы возвращать нужные значения. Подскажите?

READ ALSO
Отправка CURL + PHP 7

Отправка CURL + PHP 7

Я использую CURL для отправки файлаЭто работает хорошо, когда я отправляю файл

178
Побитовый сдвиг влево, проблемка

Побитовый сдвиг влево, проблемка

Переписываю некий код с яваскрипта на пхп, должен работать идентично

179
Как перейти на страницу гугл календаря, что бы повторно не входить в гугл

Как перейти на страницу гугл календаря, что бы повторно не входить в гугл

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

175