Я пытаюсь написать модульные тесты для приложения, где много изменений кода невозможно. Почти все .php-файлы в базе кода используют некоторые переменные $ _SERVER [''], такие как
require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php';
Итак, теперь, когда мне приходится писать и запускать тестовые примеры PHPUnit, я должен как-то установить эти переменные. В настоящее время я устанавливаю эти переменные в пользовательскую среду, а затем выполняю
$_SERVER['DOCUMENT_ROOT'] = getenv('DOCUMENT_ROOT'); require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php';
Получение таких переменных сервера работает нормально. Я запускаю свои тесты через $ phpunit test.php
как $ phpunit test.php
.
Ques1: Можно ли задавать переменные $ _SERVER при запуске тестов phpunit через командную строку?
Я также должен запускать эти модульные тесты через Jenkins, и я не могу установить эту переменную сервера через ANT / файл сборки.
Ques2: Можно ли установить эту переменную через файл сборки ant в Jenkins или запустить любой скрипт оболочки перед выполнением тестов phpunit через Jenkins?
Я попытался экспортировать переменную сервера через сценарий оболочки
export DOCUMENT_ROOT=/server/path-to-root-dir
и вызов этого скрипта в файле build.xml в Jenkins
<export name="setEnv" description="set server var"> <exec executable="sh"> <arg value = "sumit.sh" /> </exec> </target>
но он не работает. Есть ли какие-то настройки, которые я могу сделать для этого? Благодаря!
Я не уверен в # 1, но сам PHPUnit должен будет его поддерживать. Я не вижу никакого способа сделать это через командную строку. Однако, если вы установите текущее обходное решение в bootstrap.php
вам не нужно делать это в каждом тесте.
Для # 2 <exec>
позволяет устанавливать переменные среды с помощью вложенных элементов <env>
. Я использую это в Дженкинсе.
<exec executable="phpunit" ...> <env key="DOCUMENT_ROOT" value="/var/www/php"/> </exec>
Обновление. Обычно вы создаете bootstrap.php
для установки исходного каталога на путь include и инициализации тестовой среды, но вам нужно. Этот файл не предоставляется PHPUnit – в отличие от phpunit.xml
.
Я phpunit.xml
его в тот же каталог, что и phpunit.xml
, но это потому, что у меня есть отдельный файл для каждого проекта. Он находится в каталоге, в котором содержатся ваши тесты. Это позволяет запускать phpunit
из командной строки, не сообщая ему, как найти эти файлы конфигурации. В противном случае вы должны использовать --bootstrap
и / или --configuration
чтобы указать на них.
Вот как я структурирую типичный проект:
<project-root>/ build.xml src/ MyClass.php test/ MyClassTest.php phpunit.xml bootstrap.php