Вопрос

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

/src  
  MyClass.java

/test  
  MyClassTest.java

и так далее.

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

Это было полезно?

Решение

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

/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');

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

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

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


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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top