Тестирование кода, чувствительного к среде, в Lithium

В тесте есть ли способ временно переопределить то, что возвращает Environment::get() в классе, который расширяет StaticObject?

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

В моем тесте я хочу сделать что-то вроде этого:

Features::add('new_ui', array('production' => false, 'staging' => true));
// Magic that makes Environment::get() in the Features class return 'staging'
$this->assertTrue(Feature::check('new_ui'));
// Magic that makes Environment::get() in the Features class return 'production'
$this->assertFalse(Feature::check('new_ui'));

Я мог бы, вероятно, что-то взломать, используя MockEnvironment, но есть ли более чистый способ лития для достижения этого?


person michaeltwofish    schedule 18.11.2012    source источник


Ответы (1)


Если вы пишете тест, правильным способом будут моки или вводимое закрытие, которое используется для возврата состояния среды.

person Nate Abele    schedule 19.11.2012
comment
Я закончил тем, что издевался над классом Environment и моими функциями. Приветствуются любые другие отзывы, github.com/michaeltwofish/li3_features. - person michaeltwofish; 07.12.2012
comment
Выглядит неплохо. Я бы также подумал о включении помощника, чтобы шаблоны были немного чище. - person Nate Abele; 11.12.2012