Макет каталога для тестов PHPUnit?

Я давний программист на Java, работающий над проектом PHP, и я пытаюсь запустить PHPUnit и заставить его работать. При модульном тестировании в Java обычно помещают классы тестовых примеров и обычные классы в отдельные каталоги, например:

/src  
  MyClass.java

/test  
  MyClassTest.java

и так далее.

При модульном тестировании с помощью PHPUnit обычно используется одна и та же структура каталогов или есть лучший способ разложить тестовые классы? Пока что единственный способ заставить оператор include ("MyClass.php") "работать правильно - это включить тестовый класс в тот же каталог, но я не хочу включать тестовые классы, когда я нажимаю на производство.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
14
1
4 461
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вам необходимо изменить PHP include_path, чтобы он знал, где найти MyClass.php, когда вы используете include() в своем модульном тесте.

У вас может быть что-то вроде этого в верхней части вашего тестового файла (перед вашим включением):


set_include_path(get_include_path() . PATH_SEPARATOR . "../src");

Это добавит ваш каталог src в путь включения и позволит вам хранить реальный код отдельно от тестового кода.

Ответ принят как подходящий

Я думаю, что хранить файлы по отдельности - это хорошая идея. Обычно я использую такую ​​структуру папок:

/myapp/src/        <- my classes
/myapp/tests/       <- my tests for the classes
/myapp/public/      <- document root

В вашем случае, для включения класса в ваш тестовый файл, почему бы просто не передать весь путь методу include?

include('/path/to/myapp/src/MyClass.php');

или же

include('../src/MyClass.php');

Я помещаю свои тестовые примеры рядом с источником в файле с тем же именем, но с расширением .phpt. Скрипт развертывания просто отфильтровывает * .phpt, когда они отправляются в производство.

По моему опыту, ответ Брайана Филлипса не заходит достаточно далеко. Вы не знаете, в каком каталоге находится текущий каталог, когда ваши тесты выполняются PHPUnit. Поэтому вам нужно указать абсолютный путь к файлу тестового класса в выражении set_include_path (). Так:

set_include_path(get_include_path() . PATH_SEPARATOR . 
                        dirname(__FILE__) . "/../src");

Этот фрагмент можно поместить в собственный заголовочный файл SetupIncludePath.php и включить в тестовые файлы с помощью параметра require_once, чтобы тестовые наборы не добавляли путь несколько раз.

Другие вопросы по теме