Singletones + Unit-testing (in PHP5)
От: Дм.Григорьев  
Дата: 16.02.06 00:25
Оценка: :))
Всем привет!

Когда-то один товарищ убедил меня в том, что global vars — это нехорошо, и наплодил я уйму синглтонов на PHP5, создающихся по требованию и живущих, пока скрипт не скончается. В целом, весьма удобно.

Сейчас делаю сайтик, серверная PHPшная часть которого принимает и отдает по HTTP только XML (клиент на Flash). Захотелось мне покрыть unit-testами этот серверный XML-based API. Чтобы не запускать каждый тест через HTTP с внешними редиректами (долго и неэстетично), я должен либо отказаться от синглтонов, либо убивать их экземпляры ручками перед началом каждого теста, сбрасывая состояние приложения в "только что запущено":

class CSingleton {
   ...
   function destroyInstance() {
      UT::checkActive();  // throws if not in unit-testing mode
      self::$__instance = NULL;
   }
};


Оба варианта кажутся одинаково кривыми. Кроме того, не исключена ситуация, когда мне потребуется тестировать синглтон, а потом создавать его экземпляр как часть среды для тестов других классов.

В общем, выглядит все это так, что сингтоны — сакс. До сих пор не могу понять, куда ж мне ползти? Как осел буриданов... Подскажите плиз что-нибудь дельное.

И есть ли какие-нибдуь книги/статьи по поводу грамотной декомпозиции именно с точки зрения TDD?
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.