Задать вопрос
@kaxa3201

Как замокать метод phpunit?

Пишут phpunit тест
Хочу убедиться что delete возвращает именно то, что мне нужно. Но в методе delete вызывается другой приватный метод (canDelete) как мне правильно написать mock для canDelete ?
$data = $service->delete($params);
  • Вопрос задан
  • 596 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
Скорее всего вам это не нужно, так как приватные методы не нужно мокать, в общем случае. Мокают методы ВНЕШНИХ зависимостей

Но если прямо нужно, то текущий объект (метод которого тестите) тоже создаете через мок-билдер. То есть тестируемый класс становится моком. И делаете тестируемый метод исключением, то есть его мокать у мока не нужно и он будет отрабатывать как есть...

Пример (не забываем про методологию AAA):
// Arrange
$provider = $this
     ->getMockBuilder(UserProvider::class)
     ->setMethodsExcept(['delete']) // перечисленные тут методы будут настоящими, хоть и мок
     ->setConstructorArgs([])       // сюда зависимости конструктора передать
     ->getMock();
$provider = $provider
     ->expects($this->once())
     ->method('canDelete') // мокаем приватный метод
     ->willReturn(true);

// Action
$result = $provider->delete();

// Assert
$this->assertEquals(true, $result);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы