PHPUnit, проверенные интерфейсы и instanceof - PullRequest
35 голосов
/ 15 июля 2010

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

if ($instance instanceof Interface) {};

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

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

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

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

Спасибо

Ответы [ 2 ]

47 голосов
/ 18 апреля 2011

существует также assertInstanceOf с 3.5.0

Пример:

$this->assertInstanceOf('\Models\User', $this->userService->findById(1));
39 голосов
/ 15 июля 2010

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

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

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

...