模拟框架返回具有不同名称和类型的类

时间:2012-07-26 21:15:50

标签: php unit-testing mocking phpunit mockery

我正在尝试创建一个模拟来满足使用此代码的类型提示(Mockery):

return \Mockery::mock('\Contracts\Helpers\iFileSystemWrapper');

或者这个(PHPUnit):

return $this->getMock('\Contracts\Helpers\iFileSystemWrapper');

但返回的模拟名为Mockery\Mock ObjectMock_iFileSystemWrapper_a5f91049。当它不是我需要的任何一个框架的实例时,我该如何键入检查?

为什么模拟框架试图加载真正的类?如果我想要真正的课程,我会包括真正的课程。

这个问题在编写测试时已经减慢了很多次我只是抛出类型暗示窗口并检查类名,或者只是使用生产对象,因为模拟很难使用。

2 个答案:

答案 0 :(得分:2)

我刚刚尝试了我自己的现有测试,并且通过将接口命名空间名称从存在的名称更改为不存在的名称,我得到的与您描述的完全相同(使用phpunit)。我的模拟对象有类名Mock_ViewInterface_c755461e。当我将其更改回正确的接口名称时,它可以正常工作。

因此,我会说:

  1. 您正在尝试使用不存在的接口名称(例如拼写错误或缺少名称空间组件)。
  2. 由于某些原因,您的图书馆代码未加载,例如在单元测试引导程序中未正确设置自动加载。

答案 1 :(得分:-2)

您需要使用特殊功能来检查基类。 像这样:

$mock = $this->getMock('MyClass');
$this->assertInstanceOf('MyClass', $mock);