Хотя это может быть основным вопросом, можно предположить использование require_once
, на самом деле это сложнее, по крайней мере, для меня.
У меня проблема в том, что у меня есть структура проекта, очень похожая на структуру пакета в Java. Как бы мы ни использовали глобальное пространство имен. Итак, структура проекта выглядит примерно так:
ProjectName/
ModuleOne/
Class.php
composer.json
tests/
phpunit.xml
bootstrap.php
Class_test.php
В приведенном выше примере Class.php
будет создан как таковой: ProjectName\ModuleOne\Class();
Теперь вопрос в том, как мы настроили наш каталог тестов, потому что Class_test.php
буду использовать Class.php
и любые другие классы, от которых зависит один, мне нужен какой-то способ, позволяющий мне создать экземпляр в моем тесте, рассматриваемый класс. Всякий раз, когда я пытаюсь это сделать, я получаю сообщение об ошибке, говорящее, что не могу найти тот класс, о котором я пытаюсь создать экземпляр.
Хотя это может быть необычным способом работы, проект таков, что каждый модуль может быть экспортирован с использованием composer и автоматически загружен в ваш проект с использованием пространства имен, которое мы выбрали, в этом случае ProjectName
,
Кажется, проблема в том, что мне нужен каждый класс вне tests/
каталог, который будет автоматически загружен и готов к работе, так что если Class.php
расширяет любой другой класс тогда, когда Class.php
называется он будет знать, «хорошо, я должен пойти сюда, чтобы увидеть, существует ли этот другой класс также».
Теперь у каждого модуля есть файл композитора, и внутри у нас есть что-то вроде:
"autoload": {
"psr-0": {
"ProjectName\\ModuleOne\\": ""}
},
Итак, могу ли я использовать это как-нибудь в bootstrap.php для автоматической загрузки всего этого модуля в целях тестирования?
Я бы не стал изобретать велосипед, и я бы использовал структуру пакета, предложенную композитором.
Быстрый поиск в Google дал мне ссылку на этот пост: Как создать пакет PSR-4 PHP. Он в значительной степени описывает, как должна выглядеть файловая структура пакета композитора и как настраивать и организовывать тесты вашего пакета.
Надеюсь это поможет.
РЕДАКТИРОВАТЬ:
Предполагая, что у вас есть структура, предложенная в посте выше, все, что вам нужно сделать, это сообщить phpunit, где найти файл автозагрузки, созданный composer. Если вам нужна более сложная начальная загрузка, вы можете сделать следующее. Создать файл tests/bootstrap.php
и добавить следующий контент к нему:
require_once 'path/to/composer/autoload.php';
// Set up your stubs, mocks etc.
В вашем файле phpunit.xml вам нужно указать phpunit на правильный файл начальной загрузки, например:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"backupStaticAttributes="false"bootstrap="tests/bootstrap.php"colors="true"convertErrorsToExceptions="true"convertNoticesToExceptions="true"convertWarningsToExceptions="true"processIsolation="false"stopOnFailure="false"syntaxCheck="false">
<testsuites>
<testsuite name="Nacho Test Suite">
<directory suffix=".php">./tests/</directory>
</testsuite>
</testsuites>
</phpunit>
В качестве альтернативы вы можете запустить phpunit с --bootstrap
флаг, например:
vendor/bin/phpunit --bootstrap path/to/bootstrap.php
Других решений пока нет …