php Mock-объект -- Пример простейшего мока

Дело происходит в классе вашего unit-теста, который обязательно унаследован от TestCase класса библиотеки PHPUnit (т.к. мы используем методы данной библиотеки):

use PHPUnit\Framework\TestCase;

class SaleProductsGetterTest extends TestCase
{
    //...

Если вы используете Symfony-обёртку phpunit-bridge для работы с PHPUnit, наследуйте KernelTestCase.

Далее задаём Mock-объекту ожидаемый метод, аргумент метода и возвращаемое значение:

// создаём объект
$saleRepository->getMockBuilder(SaleRepository::class)->getMock();
// или так, если вы используете Symfony-обёртку phpunit-bridge для работы с PHPUnit
// $saleRepository = $this->createMock(SaleRepository::class);
// это значит, что ожидается, что данный метод будет вызван ТОЛЬКО единожды
// <em>$this->any()</em> - будет означать, что м.б. вызван сколько угодно раз
$saleRepository->expects($this->once())
    // это название метода
    ->method('getById')
    // это аргумент метода
    ->with(1)
    // это ответ при вызове <em>getById()</em>, нужный для теста.
    // допустим, нам надо, чтобы mock вернул именно такой экземпляр Sale
    ->willReturn(new Sale('firstField', 100500, true));

Всё, дальше в коде используем mock как объект класса SaleRepository. Он вернёт то, что мы ему указали:

 dump($saleRepository->getById(1)); // Sale('firstField', 100500, true)

Источник