Макет каталога для тестов PHPUnit? - PullRequest
13 голосов
/ 15 сентября 2008

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

/src  
  MyClass.java

/test  
  MyClassTest.java

и т. Д.

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

Ответы [ 4 ]

9 голосов
/ 15 сентября 2008

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

/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');
4 голосов
/ 15 сентября 2008

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

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


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

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

2 голосов
/ 05 марта 2009

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

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

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

1 голос
/ 19 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...