在 PHPUnit 上创建具有类型提示方法的接口的 Mock 对象失败

2022-08-30 21:08:58

我创建了以下界面:

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

然后我尝试用PHPUnit 3.4制作此接口的Mock对象,但我得到以下错误:

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

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

<?php
public function execute($request, array $params)

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

我也在没有命名空间的情况下尝试过,但我仍然得到同样的错误。


答案 1

也许有点晚了。

我遇到了完全相同的问题,事实证明提示的类型没有加载,也不可加载。因此,PHP 的 ReflectionParameter 不返回类名,PHPUnit 的模拟生成器也不包含它。

如果确保提示的类型已加载或使用自动加载进行加载,则它应该有效。


答案 2

推荐