在 PHP 中使用 Mockery 模拟接口时遇到了一个问题(我使用的是 laravel 框架,但我不确定这是否相关。
我定义了一个接口
<?php namespace MyNamespace\SomeSubFolder;
interface MyInterface {
public function method1();
}
我有一个类可以在其中一种方法上键入该接口...
<?php namespace MyNamespace\SomeSubFolder;
use MyNamespace\SomeSubFolder\MyInterface;
class MyClass {
public function execute(MyInterface $interface)
{
//does some stuff here
}
}
...我正在尝试测试 MyClass。我创建了一个看起来像这样的测试:
public function testExecute()
{
$mock = Mockery::mock('MyNamespace\SomeSubFolder\MyInterface');
$mock->shouldReceive('method1')
->andReturn('foo');
$myClass = new MyClass();
$myClass->execute($mock);
}
当我运行测试时,我收到消息
'ErrorException:传递给 MyClass::execute 的参数 1 必须是 MyNamespace\SomeSubFolder\MyInterface 的实例,给定的 Mockery_123465456 实例......'
我不知道为什么。
在测试中,我尝试了以下方法:
$this->assertTrue(interface_exists('MyNamespace\SomeSubFolder\MyInterface'));
$this->assertTrue($mock instanceof MyInterface);
并且都返回true,所以看起来好像我已经创建了实现接口的实例,但是当我在类上调用方法时它不同意。有任何想法吗???