PHPUnit, издевательские интерфейсы и экземпляры


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

if ($instance instanceof Interface) {};

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

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

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

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

Спасибо

Author: Bryan M., 2010-07-15

2 answers

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

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

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

 38
Author: martinvium, 2010-07-15 11:13:11

Существует также assertInstanceOf по состоянию на 3.5.0

Пример:

$this->assertInstanceOf('\Models\User', $this->userService->findById(1));
 47
Author: Brendon-Van-Heyzen, 2014-01-09 15:30:17