Раскладка каталога для тестов PHPUnit?
Я давний Java-программист, работающий над проектом PHP, и я пытаюсь запустить PHPUnit и работать. При модульном тестировании на Java обычно ставить классы тестов и обычные классы в отдельные каталоги, например:
/src
MyClass.java
/test
MyClassTest.java
и т.д.
При модульном тестировании с помощью PHPUnit, обычно ли следовать той же структуре каталогов, или есть лучший способ выложить тестовые классы? До сих пор единственным способом заставить оператор include ( "MyClass.php" ) работать корректно, - включить тестовый класс в тот же каталог, но я не хочу включать тестовые классы, когда я нажимаю на производство.
Ответы
Ответ 1
Я думаю, что неплохо держать ваши файлы в отдельности. Обычно я использую структуру папок следующим образом:
/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');
Ответ 2
Вам нужно изменить PHP include_path, чтобы он знал, где найти MyClass.php, когда вы include()
его в unit test.
У вас может быть что-то подобное в верхней части тестового файла (перед включением):
set_include_path(get_include_path() . PATH_SEPARATOR . "../src");
Это добавляет ваш каталог src
в путь включения и позволяет вам сохранить ваш реальный код отдельно от вашего тестового кода.
Ответ 3
Ответ Брайана Филлипса не слишком далеко, по моему опыту. Вы не знаете, что представляет собой текущий каталог, когда ваши тесты запускаются PHPUnit. Поэтому вам нужно указать абсолютный путь файла тестового класса в вашем выражении set_include_path(). Вот так:
set_include_path(get_include_path() . PATH_SEPARATOR .
dirname(__FILE__) . "/../src");
Этот фрагмент может быть помещен в собственный заголовочный файл SetupIncludePath.php и включен в тестовые файлы с "require_once", поэтому тестовые наборы не добавляют путь несколько раз.
Ответ 4
Я поставил свои тестовые примеры рядом с источником в файл с тем же именем, но с расширением .phpt. Развертывание script просто отфильтровывает *.phpt, когда они нажимают на производство.