在PHPUnit中,在方法中使用type-hint创建接口的Mock对象失败

Mar*_*ark 18 php phpunit interface mocking

我创建了以下界面:

<?php
interface Action
{
    public function execute(\requests\Request $request, array $params);
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用PHPUnit 3.4创建此接口的Mock对象,但是我收到以下错误:

致命错误:Mock_Action_b389c0b1 :: execute()的声明必须与D:\ Xampp\xampp\php\PEAR\PHPUnit\Framework\TestCase.php(1121)中的Action :: execute()的声明兼容:eval()' d代码在第2行

我查看了从PHPUnit获得的堆栈跟踪,发现它创建了一个实现接口Action的Mock对象,但是以下列方式创建了execute方法:

<?php
public function execute($request, array $params)
Run Code Online (Sandbox Code Playgroud)

如您所见,PHPUnit接管数组类型提示,但忘记了\ requests\Request.这显然会导致错误.有谁知道这个错误的解决方法?

我也尝试过没有命名空间,但我仍然得到同样的错误.

小智 26

也许有点晚了.

我有完全相同的问题,事实证明暗示的类型没有加载,也无法加载.因此,PHP的ReflectionParameter不返回类名,而PHPUnit的模拟生成器不包含它.

如果您确保使用自动加载功能加载或加载提示类型,它应该可以正常工作.

  • 从来没有太晚:6年后这对我帮助很大.我的问题是在一个草率的重构之后命名空间与目录结构不匹配,所以它在PSR4下无法加载.它是一个模糊的问题,因为模拟构建器根本不会发出警告,只是创建一个随机类!我通过尝试创建一个手动模拟女儿类来诊断它,当然这很快就出现了命名空间问题. (2认同)