У меня есть абстрактный класс, который вызывает статический метод в своем конструкторе. Однако при написании теста в 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; это один из функций, но плохо названный, и я не могу придумать, как еще назвать его.