phpunit — Как мне загрузить нужный мне файл? Переполнение стека

Хотя это может быть основным вопросом, можно предположить использование 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 для автоматической загрузки всего этого модуля в целях тестирования?

0

Решение

Я бы не стал изобретать велосипед, и я бы использовал структуру пакета, предложенную композитором.

Быстрый поиск в 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
1

Другие решения

Других решений пока нет …