首页 > 解决方案 > 我需要在哪里放置 phpunit 的钩子?

问题描述

答案可能很简单,但我一直在转圈,在任何地方都找不到答案。我正在尝试模拟最终课程,如果不做一些额外的工作,这通常是不可能的。我已经看到了多种选择,比如实现一个接口并模拟它。但这会毫无意义地创造额外的工作,所以我寻找一种绕过问题的方法。我找到的解决方案是 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 文件的扩展元素中添加文件参数来添加文件位置,但后来它说它没有打开流的权限。所以我很茫然。我需要做什么才能找到课程?是否需要保存在某个位置?目前,我只是将它放在根文件夹中,但我已经在多个位置尝试过,结果仍然相同。

标签: phpphpunit

解决方案


推荐阅读