Передать переменную в PhpUnit - PullRequest
9 голосов
/ 13 декабря 2011

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

Ответы [ 3 ]

12 голосов
/ 14 декабря 2011

В вашем 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>

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

4 голосов
/ 13 декабря 2011

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

#!/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');
0 голосов
/ 06 февраля 2015

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

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

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

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

$host = getenv('HOST_NAME');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...