Тестируем приватные методы PHP

Иногда возникают моменты когда нам нужно протестировать приватный или защищенный метод. Это может быть связанно с тем что этот метод может хранить в себе сложную бизнес логику, соответственно он должен быть покрыт тестом.

Reflection идет на помощь

Вам понадобиться PHP5 (>= 5.3.2) что бы воспользоваться возможностями Reflection. Суть метода заключается в том что бы сделать тестируемый метод публичным. Для этого нам поможет ReflectionMethod::setAccessible и ReflectionMethod::invoke.

Первый метод ReflectionMethod::setAccessible делает метод публичным и второй метод ReflectionMethod::invoke вызывает метод.

Пример теста для приватного метода:
protected static function getMethod($name) {
  // Создаем объект ReflectionClass
  $class = new ReflectionClass('MyClass');
  // Получаем из него ReflectionMethod по имени метода
  $method = $class->getMethod($name);
  // Делаем метод публичным
  $method->setAccessible(true);
  return $method;
}

public function testFoo() {
  $foo = self::getMethod('foo');
  $obj = new MyClass();
  // Вызываем метод invoke для вызова тестируемого метода
  $foo->invoke($obj);
}


Если возникнут вопросы задавайте их в комментариях.

Комментарии

Популярные сообщения из этого блога

strtolower() strtoupper() и кириллица

Dog-pile effect или блокировка в Memcached

Проблема обновления пакетов composer на Yii2