Данный объект не является экземпляром класса, этот метод был объявлен с ошибкой при попытке установить переменную-член внутри теста PHPUnit - PullRequest
0 голосов
/ 07 января 2020

При попытке установить атрибут «logger» для моего класса я получаю следующую ошибку:

ReflectionException: данный объект не является экземпляром класса, этот метод был объявлен в

public function testCheckForRecentActivity()
{
    self::bootKernel();

    $plan = new \ReflectionClass('AppBundle\Services\Courses\Revision0');

    $logger = $plan->getMethod('setLogger');
    $logger->setAccessible(true);
    $logger->invoke($plan, static::$kernel->getContainer()->get('logger.golf'));

    // ....
}

Иерархия классов выглядит следующим образом:

class Revision0 extends Base

abstract class Base extends Plans\PlanBase

abstract class PlanBase, которая использует LoggerTrait (use LoggerTrait;)

LoggerTrait выглядит так:

/**
 * @var LoggerInterface
 */
protected $logger;

/**
 * @required
 * @param LoggerInterface $logger
 */
public function setLogger(LoggerInterface $logger)
{
    $this->logger = $logger;
}

Что-то, чего мне не хватает, мешает мне настроить регистратор в моем тесте?

1 Ответ

2 голосов
/ 07 января 2020

Первый аргумент в вашем ReflectionMethod->invoke() вызове неверен. Это должен быть экземпляр 'AppBundle\Services\Courses\Revision0'. Также см. Здесь: https://www.php.net/manual/de/reflectionmethod.invoke.php

...