Установите статический метод макет до создания экземпляров в тестах - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть абстрактный класс, который вызывает статический метод в своем конструкторе. Однако при написании теста в PHPUnit, когда я пытаюсь создать макет для него, он жалуется, потому что статический метод является абстрактным и, следовательно, не определен при создании.

$interface = $this->getMockForAbstractClass(ConnectionAdapterInterface::class, [[]]);
$interface->method('createConnection')
    ->willReturn(new TestConnection());
$connection = $interface::createConnection();
abstract class ConnectionAdapterInterface
{

    public function __construct(array $configs) {
        $this->connection = static::createConnection($configs);
    }

    abstract public static function createConnection(array $config);

}

выдает ошибку Static method "createConnection" cannot be invoked on mock object.

Пожалуйста, игнорируйте, что класс называется interface; это один из функций, но плохо названный, и я не могу придумать, как еще назвать его.

1 Ответ

0 голосов
/ 23 апреля 2019

Статические методы не могут быть заглушены или осмеяны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...