Делай врапперы на пхпэшные функции и вешай на них моки. Это нормальная практика "золотой середины".
Создавать класс, который будет врапить echo(), header(), session_start(), set_cookie(), которые и так встречаются в коде один раз - это разве хорошо? Это - лишняя косвенность. Мне кажется, что это попахивает какой-то подстройкой под тестирование.
Кроме того, я использую враперы, когда необходимо, но не всегда могу повесить на них моки. Не буду же я передавать объекту используемые им враперы при его создании, так как это ведет к дублированию. Поэтому я делаю в классе методы, которые создают используемые враперы. В этом случае, я еще могу повесить моки, правда это не очень красиво выглядит (нужно сделать частичный мок тестируемого класса, в котором эмулировать метод создающий враперы, чтобы он возвращал их моки). Однако, если одни и те же враперы используются различными классами, находящимися в различных иерархиях, то я уже не могу прибегнуть к данному приему и поэтому использую фабрику враперов. В этом случае я обращаюсь к методам фабрики статически (или делаю фабрику синглтоном), так как было бы не логично создавать множество экземпляров фабрики. А так как есть статические вызовы, я не могу повесить моки.
-~{}~ 04.03.09 14:09:
Может я и не прав, но мне вообще кажется, что использование моков - это плохо. Ведь хотелось бы чтобы тесты знали только интерфейс тестируемого класса, а так получается, что они лезут еще и в его внутреннее устройство, тестируют его связи с другими классами. Если в результате рефакторинга внутренняя структура класса и его связи изменятся - тесты сломаются и их придется изменять, несмотря на то что интерфейс класса останется неизменным. Это ж плохо. Или нет?
-~{}~ 04.03.09 14:21:
[offtop]
HttpResponse
ConsoleResponse
XmlResponse
А зачем разделять XmlResponse и HttpResponse?
[/offtop]