PHPUnit,模拟接口和instanceof

时间:2010-07-14 21:01:40

标签: php unit-testing mocking phpunit

有时在我的代码中,我会检查特定对象是否实现了接口:

if ($instance instanceof Interface) {};

然而,在PHPUnit中创建所述接口的模拟,我似乎无法通过该测试。

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

我知道有一个名为Interface的类与实现Interface的类不同,但我不知道如何处理它。

我是否被迫嘲笑实现Interface的具体类?难道这不会破坏使用接口实现可移植性的目的吗?

由于

3 个答案:

答案 0 :(得分:47)

从3.5.0开始也有assertInstanceOf

示例:

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

答案 1 :(得分:39)

这对我有用:

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

也许这是一个拼写错误,或者$ instance不是你认为的那样?

答案 2 :(得分:1)

使用PhpUnit函数assertInstanceOf。

示例:

$this->assertInstanceOf(ResponseInterface::class, $signInResponse);