Где мне нужно разместить крючок для phpunit?

#php #phpunit

Вопрос:

Ответ, вероятно, очень прост, но я бегал по кругу и нигде не мог найти ответа. Я пытаюсь издеваться над заключительным классом, что обычно невозможно без дополнительной работы. Я видел несколько вариантов, таких как реализация интерфейса и насмешка над этим. Но это создало бы дополнительную работу впустую, поэтому я искал способ обойти проблему. Решение, которое я нашел, было dg/обход-финал. Мне нужно было сделать только 1 вещь, чтобы реализовать это. Выполните эту строку кода как можно раньше:

 DGBypassFinals::enable();  

После некоторых раскопок я выяснил, что лучший способ сделать это-использовать крючок и зарегистрировать это в phpunit.xml файл. Поэтому я создал свой крючок, который выглядит так:

 lt;?php declare(strict_types=1); use DGBypassFinals; use PHPUnitRunnerBeforeTestHook;  final class BypassFinalHook implements BeforeTestHook {  public function executeBeforeTest(string $test): void  {  BypassFinals::enable();  } }  

И добавил необходимый текст в xml-файл:

 lt;phpunit bootstrap="vendor/autoload.php"gt;  lt;extensionsgt;  lt;extension class="BypassFinalHook"/gt;  lt;/extensionsgt; lt;/phpunitgt;  

Но каждый раз, когда я пытаюсь запустить команду «php ./vendor/bin/phpunit». Я продолжаю получать одну и ту же ошибку «Класс «Обходной крючок» не существует». Я попытался добавить местоположение файла, добавив параметр file в элемент расширения xml-файла, но затем он сказал, что у него нет разрешений на открытие потока. Так что я в растерянности. Что мне нужно сделать, чтобы он нашел класс? Требуется ли его сохранять в определенном месте? В настоящее время он просто находится в корневой папке, но я пробовал его в нескольких местах и все равно получил тот же результат.

Комментарии:

1. Это потому, что класс BypassFinalHook определен в пространстве имен? Если это так, вам нужно заменить атрибут класса на class="SomeNamespaceBypassFinalHook" . Если нет, вы можете попробовать добавить атрибут file="path/to/BypassFinalHook.php" в lt;extensiongt; тег.