Иногда в моем коде я проверю, реализует ли конкретный объект интерфейс:
if ($instance instanceof Interface) {};
Однако, создавая mocks этого интерфейса в PHPUnit, я не могу пройти этот тест.
// class name is Mock_Interface_431469d7, does not pass above check $instance = $this->getMock('Interface');
Я понимаю, что наличие класса с именем Interface отличается от интерфейса, реализующего класс, но я не уверен, как с этим справиться.
Я вынужден издеваться над конкретным классом, который реализует интерфейс? Разве это не победит цель использования интерфейса для переносимости?
благодаря
Это работает для меня:
$mock = $this->getMock('TestInterface'); $this->assertTrue($mock instanceof TestInterface);
Может быть, это опечатка или, может быть, $ instance, это не то, что вы думаете?
есть также assertInstanceOf начиная с 3.5.0
Пример:
$this->assertInstanceOf('\Models\User', $this->userService->findById(1));