Передать переменную в PhpUnit

Я разработал набор тестовых примеров, использующих phpunit, используемые для тестирования как сайта разработки, так и производственного сайта. Единственное отличие – это доменное имя. Как передать домен из командной строки в тестовые примеры phpunit, так что мне не нужно изменять каждый файл?

В phpunit-bootstrap.php вы можете сделать что-то вроде этого:

 $site = getenv('DOMAIN'); 

и использовать

 <php> <env name="DOMAIN" value="http://production.com"/> </php> 

в файле phpunit.xml как показано в документации .

Недостатком этого подхода является то, что вам нужно иметь два разных xml файла.


Другие варианты используют пользовательский сценарий оболочки вокруг phpunit, как показано на рисунке @DavidHarkness, который имеет тенденцию хорошо работать

или, если вы не хотите запускать эти тесты автоматическим способом (или использовать оба подхода), чтобы сделать что-то вроде:

 $site = getenv('DOMAIN'); if(!$site) { echo "Enter Domain: "; $site = fgets(STDIN); } 

и попросите бегуна проверить среду, и если ничего не просят вас о домене.


Env или определить или что-то еще

То же самое касается практически всех способов, с помощью которых php может принимать входные данные из внешнего мира.

 <php> <define name="DOMAIN" value="http://production.com"/> </php> 

также работает, если вы используете константу в любом случае, например.

Перед запуском тестов вы можете установить переменную среды. Чтобы сделать это проще для себя, создайте простой скрипт для экспорта переменной и выполнения тестов.

 #!/bin/bash USAGE="Usage: $0 <domain> [file-or-directory]" if [ "$#" == "0" ]; then echo "$USAGE" exit 1 fi export TEST_DOMAIN=$1 shift phpunit $* 

В базовом тестовом примере вы можете получить доступ к этому значению с помощью getenv :

 $domain = getenv('TEST_DOMAIN'); 

Я тоже столкнулся с этим. Один из способов сделать это с помощью bash – экспортировать переменные ENV, которые вы хотите передать, и связать вызов phpunit с помощью ; вот так:

 #: HOST_NAME="my.host.com"; phpunit MyTestFile.php 

Это создаст HOST_NAME среды HOST_NAME и сразу же вызовет ваш модульный тест.

Затем в вашем тестовом скрипте вы можете получить доступ к переменной HOST_NAME используя что-то вроде:

 $host = getenv('HOST_NAME');