Подтвердить что ты не робот

PHPUnit, посмеянные интерфейсы и instanceof

Иногда в моем коде я проверю, реализует ли конкретный объект интерфейс:

if ($instance instanceof Interface) {};

Однако, создавая mocks этого интерфейса в PHPUnit, я не могу пройти этот тест.

 // class name is Mock_Interface_431469d7, does not pass above check
 $instance = $this->getMock('Interface'); 

Я понимаю, что наличие класса с именем Interface отличается от интерфейса, реализующего класс, но я не уверен, как справиться с этим.

Я вынужден издеваться над конкретным классом, который реализует интерфейс? Разве это не победит цель использования интерфейса для переносимости?

Спасибо

4b9b3361

Ответ 1

Это работает для меня:

$mock = $this->getMock('TestInterface');
$this->assertTrue($mock instanceof TestInterface);

Может быть, это опечатка или, может быть, $instance, это не то, что вы думаете?

Ответ 2

существует также assertInstanceOf начиная с 3.5.0

Пример:

$this->assertInstanceOf('\Models\User', $this->userService->findById(1));