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

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

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

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

Пример (не забываем про методологию 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);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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