Тестируемый код и глобальные константы

Здесь я пишу небольшое приложение с единственной целью - улучшить привычки ООП / тестируемого кода. И любить это, кстати!

Я стремлюсь усвоить методологию разработки «тестируемого кода», в основном, читая сообщения евангелистов модульного тестирования, таких как Себастьян Бергманн, Миско Хевери и Джорджио Сирони.

Среди трудностей, которые я усвоил, - неправильное использование статических методов, объектов, которые зависят от объектов, которые зависят от объектов. В настоящее время я застрял на глобальных константах. В начале своего приложения я загружаю одну КОНСТАНТУ, которая просто устанавливает режим приложения в отладке или продукте:

/**
 *  APP_MODE values:
 *
 *  PROD   Production, no errors displayed email sent on error, logs to 
 *         logs/app-<date-time>.log.
 *
 *  DEBUG: All warnings and errors displayed, emails disabled and log messages 
 *         sent to console. Whether in-memory modifications to configuration 
 *         data are allowed
 */
 define("APPMODE", "DEBUG");

Как можно протестировать классы приложения для правильной обработки ошибок в зависимости от состояния этой константы?

Сначала я подумал просто переместить глобальную константу в константу класса, а не в моем классе init, и это решает случай для этого конкретного класса, но меня не устраивает эта процедура. Я имею в виду, следует ли просто избегать общесайтовых констант, которые не являются "истинными" константы в строгом смысле одного возможного значения всегда ?

Я не могу представить, чтобы тестировщикам приходилось писать по 2 набора тестов для каждого класса, т.е. initClassDebugTest.php и initClassProdTest.php, если phpUnit не может каким-то образом сбросить глобальное состояние? Следует ли избегать использования глобальных констант таким образом? У меня странное чувство, что мне вообще не следует использовать здесь константу. Мне было бы очень любопытно узнать, как проверенные кодировщики будут обрабатывать глобальные определения с двумя возможными значениями во время выполнения.

6
задан hakre 20 December 2012 в 20:24
поделиться