我正在尝试创建一个模拟来满足使用此代码的类型提示(Mockery):
return \Mockery::mock('\Contracts\Helpers\iFileSystemWrapper');
或者这个(PHPUnit):
return $this->getMock('\Contracts\Helpers\iFileSystemWrapper');
但返回的模拟名为Mockery\Mock Object
或Mock_iFileSystemWrapper_a5f91049
。当它不是我需要的任何一个框架的实例时,我该如何键入检查?
为什么模拟框架试图加载真正的类?如果我想要真正的课程,我会包括真正的课程。
这个问题在编写测试时已经减慢了很多次我只是抛出类型暗示窗口并检查类名,或者只是使用生产对象,因为模拟很难使用。
答案 0 :(得分:2)
我刚刚尝试了我自己的现有测试,并且通过将接口命名空间名称从存在的名称更改为不存在的名称,我得到的与您描述的完全相同(使用phpunit)。我的模拟对象有类名Mock_ViewInterface_c755461e
。当我将其更改回正确的接口名称时,它可以正常工作。
因此,我会说:
答案 1 :(得分:-2)
您需要使用特殊功能来检查基类。 像这样:
$mock = $this->getMock('MyClass');
$this->assertInstanceOf('MyClass', $mock);