php Mock-объект -- Пример простейшего мока
Primary tabs
Дело происходит в классе вашего 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)
Источник
- Log in to post comments
- 3020 reads