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
- 3898 reads