Занимаясь проблемами пути с PHPUnit

После многих лет я решил использовать первую букву слов в пароле. Невозможно расколоться, универсальный для длины, и ограничения как "Вы должны иметь цифру", и трудно совершать ошибки.

Это работает путем создания фразы. сумасшедшая забавная яркая тема полезна! "Посторонние объекты Переполнения стека посажены, не применяя ракеты или колеса". Возьмите первую букву, Ваш пароль является "soalwurow"

, можно ввести это быстро и точно , так как Вы не помните побуквенный, Вы просто говорите предложение в голове.

я также как наличие слов чередуюсь от левой и правой стороны клавиатуры, это дает Вам незначительно более быструю скорость печати и более приятный ритм. Заметьте в моем примере, Ваши руки чередуют left-right-left-right.

11
задан Jeremy Sharpe 31 October 2009 в 09:43
поделиться

2 ответа

Поздний ответ, извините.

Нет, вы ничего не упускаете. PHP CLI (PHP для командной строки) отличается от PHP в качестве модуля Apache / CGI.

Что вы могли бы сделать, это изменить setUp () ваших файлов, чтобы установить для $ _ SERVER ['DOCUMENT_ROOT'] то, что вам нужно (с $ _ SERVER по-прежнему доступен как суперглобальный даже в контексте интерфейса командной строки), например :

public function setUp() {
  $_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__) . "/../application";
}

Будьте осторожны, вы, вероятно, захотите поместить это в свой tearDown () :

public function tearDown() {
  unset($_SERVER['DOCUMENT_ROOT']);
}

PHPUnit создает резервную копию вашего глобального состояния , если вы вообще используете глобальные (также суперглобальные) данные, которые могут значительно замедлить ваши тесты, поэтому лучше избегать их после завершения теста.

13
ответ дан 3 December 2019 в 06:46
поделиться

Лучшим способом было бы отделить ваш код от использования $ _ SERVER или любого другого глобального массива. Например, сделайте

class MyClass
{
    protected $_docroot;

    public function __construct($docroot)
    {
        $this->_docroot = $docroot;
    }

    public function getDocRoot() 
    {
        return $this->_docroot;
    }
}

вместо

class MyClass
{
    public function getDocRoot() 
    {
        return $_SERVER['DOCUMENT_ROOT'];
    }
}

. Это позволяет вам сделать

// in your actual code
$instance = new MyClass($_SERVER['DOCUMENT_ROOT']);
$docroot = $instance->getDocRoot();

// in your test
$instance = new MyClass($variable_holding_the_correct_path);
$docroot = $instance->getDocRoot();

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

0
ответ дан 3 December 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: