【发布时间】:2022-05-03 20:38:41
【问题描述】:
答案可能很简单,但我一直在兜圈子,到处都找不到答案。 我正在尝试模拟最终课程,如果不做一些额外的工作,这通常是不可能的。我已经看到了多种选择,比如实现一个接口并模拟它。但这会毫无意义地创造额外的工作,所以我寻找一种绕过问题的方法。我找到的解决方案是 dg/bypass-finals。我只需要做一件事来实现它。尽早执行这行代码:
DG\BypassFinals::enable();
经过一番挖掘,我发现最好的方法是使用钩子并将其注册到 phpunit.xml 文件中。所以我创建了如下所示的钩子:
<?php declare(strict_types=1);
use DG\BypassFinals;
use PHPUnit\Runner\BeforeTestHook;
final class BypassFinalHook implements BeforeTestHook
{
public function executeBeforeTest(string $test): void
{
BypassFinals::enable();
}
}
并在xml文件中添加了所需的文字:
<phpunit bootstrap="vendor/autoload.php">
<extensions>
<extension class="BypassFinalHook"/>
</extensions>
</phpunit>
但是每次我尝试运行命令“php ./vendor/bin/phpunit”时。我不断收到相同的错误“类“BypassFinalHook”不存在”。我尝试通过在 xml 文件的扩展元素中添加文件参数来添加文件位置,但后来它说它没有打开流的权限。所以我很茫然。我需要做什么才能找到课程?是否需要保存在某个位置?目前,我只是将它放在根文件夹中,但我已经在多个位置尝试过,结果仍然相同。
【问题讨论】:
-
是不是因为 BypassFinalHook 类是在命名空间中定义的?如果是这种情况,您需要将类属性替换为
class="Some\Namespace\BypassFinalHook"。如果没有,您可以尝试将属性file="path/to/BypassFinalHook.php"添加到<extension>标记中。 -
我已经这样做了,但是它说它没有打开steam的权限。