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






Вам необходимо изменить 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, чтобы тестовые наборы не добавляли путь несколько раз.
Перекрестная ссылка: Лучшие практики PHPUnit по организации тестов (ноябрь 2011 г.)