Ответ 1
Я столкнулся с той же проблемой, и если вы не слишком хорошо знакомы с внутренней работой PHPUnit и Composer, это действительно может показаться озадачивающим.
PHPunit не использует автозагрузчик Composer для поиска любого из ваших тестовых классов. Он просто сканирует любой каталог, который вы ему даете, и работает по одному файлу за раз.
Следовательно, он не знает ни о каком другом классе, кроме того, в котором он работает. Вот где запускается файл начальной загрузки.
Если вы хотите использовать автозагрузчик Composer для загрузки других тестовых классов, вам нужно указать, где они могут найти эти тестовые классы (и, при необходимости, в пространстве имен).
Есть два способа сделать это:
- Добавьте раздел
autoload-dev
в вашcomposer.json
или - Добавить тестовый каталог в автозагрузчик композитора
Используйте autoload-dev
В разделах autoload-dev
вы можете определить правила автозагрузки для целей разработки.
Цитата прямо из руководство:
Классы, необходимые для запуска набора тестов, не должны включаться в основные правила автозагрузки, чтобы избежать загрязнения автозагрузчика в производстве и когда другие люди используют ваш пакет в качестве зависимости.
Следовательно, это хорошая идея полагаться на выделенный путь для вашего подразделения тестов и добавить его в раздел autoload-dev.
Пример:
{ "autoload": { "psr-4": { "MyLibrary\\": "src/" } }, "autoload-dev": { "psr-4": { "MyLibrary\\Tests\\": "tests/" } } }
Добавить в автозагрузчик композитора
Альтернативой было бы получить автозагрузчик Composer и add
ваше пространство имен тестирования (если оно есть) и каталог, в котором живут ваши тесты. Как это сделать, как описано в руководстве (внизу раздела автозагрузки в разделе "Основное использование" ):
$loader = require('/path/to/vendor/autoload.php'); $loader->add('Test\\', __DIR__ . '/Tests');
Если ваши тесты используют пространства имен, которые отражают тестовый каталог, и у вас все еще возникают проблемы, вы можете попробовать отказаться от префикса, заменив первый параметр ('Test\\'
) на ''
.
Если вам нужно больше понять, как все это работает, вы должны взглянуть на класс