8

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

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

或者这个(PHPUnit):

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

但是返回的模拟被称为Mockery\Mock Objector Mock_iFileSystemWrapper_a5f91049。当它不是我需要的任何一个框架的实例时,我应该如何输入检查?

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

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

4

2 回答 2

4

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

因此,我会说:

  1. 您正在尝试使用不存在的接口名称(例如拼写错误或缺少名称空间组件)。
  2. 由于某种原因,您的库代码没有被加载,例如在您的单元测试引导程序中没有正确设置自动加载。
于 2013-02-03T08:28:21.193 回答
-2

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

$mock = $this->getMock('MyClass');
$this->assertInstanceOf('MyClass', $mock);
于 2013-02-02T22:24:48.837 回答