Я использую библиотеку PHP-DI, и она отлично работает с моим кодом с помощью файла начальной загрузки и конфигурации, как это рекомендовано документацией PHP-DI.
Затем в моем приложении я получаю контейнер и запускаю его, вызывая загрузчик:
$container = require __DIR__ . '/Container/bootstrap.php';
$main = $container->get( Main::class );
Итак, теперь я пытаюсь настроить модульное тестирование с помощью PHPUnit.
Я хотел бы получить $container в каждом тестовом классе, чтобы я мог внедрить все зависимости каждого теста, используя $container->injectOn($this) как предложено в документации PHP-DI.
Я наткнулся на этот открытый вопрос [который в основном находится над моей головой], но он все еще открыт и, похоже, не содержит никаких рекомендаций.
https://github.com/PHP-DI/PHP-DI/issues/125
Единственное, что я думаю, это то, что я мог бы просто вызвать начальную загрузку в setUp() так же, как и в моем основном приложении?
$container = require __DIR__ . '/Container/bootstrap.php';
Это то, что я должен делать? Есть ли более элегантный или рекомендуемый способ сделать это?
Спасибо!






Да, загрузка контейнера в тесте — это нормально. Если ваш бутстрап делает слишком много вещей, которые могут усложниться, но в идеале ваш бутстрап не должен делать многого (просто настройте контейнер и создайте класс приложения).
Спасибо за отзыв - я не упомянул в своем первоначальном запросе, что это для плагина Wordpress, и я использую инструменты тестирования плагинов Wordpress, которые загружают WP, который загружает мой плагин, который загружает контейнер и т. д. Это проблема в том, что загрузчик WP загружает его, а также мой тестовый код? Редактировать: кажется, что тест работает нормально... Мне просто интересно, следует ли мне продолжать исследовать способ упрощения, чтобы контейнер загружался только один раз.
Честно говоря, я не уверен, но пока он работает и не слишком медленный, перезагрузка как можно чаще между тестами никогда не бывает плохой. По крайней мере, каждый тест изолирован от других.