{TDD] Для чего нужны MockObject'ы ?

Wicked

Новичок
denver
ну а восстанавливать из сингтона базы %)
Regedit::setObj("db", DB::getInstance());

Вообще касательно симплтеста,
Regedit::setObj("db", DB::getInstance());
уйдет в ::setup(), а забивание в реестр моков будет только в тех тестах, где нужны именно моки.
 

denver

?>Скриптер
Не кошерно :( да и setObj нужен только для тестов

-~{}~ 05.07.06 20:44:

Конечно это моё имхо насчет кошерности. Но если я правильно понял тесты по факту могут и должны улучшать дизайн а не [только] подгонять его под тесты.
 

Wicked

Новичок
denver
хм... а откуда тогда реестр должен получать инстансы для ключей "db" и "ldap"? Безотносительно тестов.
 

denver

?>Скриптер
Wicked
Хм.. я то думал что вы имеете в виду что getObj('db') создает экземпляр класса сам, если его (экземпляра DB) не существует (ну как фабрика например).
А если нет то это что ж получается, перед любым использованием класса который юзает DB нужно вызывать Registry::setObj('db', DB::getInstance).
PHP:
//program, not test
...
Registry::setObj('db', DB::getInstance).
$user = new User;
...
И так, для надежности, в каждом классе использующем new User?
 

Wicked

Новичок
denver
зачем? это же регистр-синглтон. Имхо достаточно его заводить во время инициации всего приложения, и затем везде использовать.
 

Wicked

Новичок
Necromant
наверное про сингтон гоню :) а под "заведением" я имел в виду наполнение его реальными инстансами.
 

Necromant

Новичок
Зачем ??? Можно
1. через __construct
2. объявить интерфейс iRegistry для создаваемых объектов , в котором и будут переданы все данные нужные для инициализации. Где в качестве параметра передавать объект RegistryDataObj содержащий только данные.
 

denver

?>Скриптер
Wicked
"Завести" db и ldap в реестре в самом начале нужными setObj('db') и setObj('ldap') -- тогда уж не легче ли делать это в самом методе getObj() -- заводить их если они еще не были заведены? Тогда и в setObj() надобность отпадает... за исключением тестов. Но стОит ли ради тестов то?..


Necromant
>>1. через __construct
Что вы имеете в виду, ведь не Registry::__construct же ж.
если User::___construct($db, $ldap) то само собой разумеется.
 

Necromant

Новичок
Вообще объект сам должен знать о себе все и все $db, $ldap получать из реестра, главное ведь чтобы возращаемые объекты реализовали интерфейс iDB, iLDAP.
 

denver

?>Скриптер
Wicked, Necromant
>>все $db, $ldap получать из реестра.

Ну если это так принято то наверное есть сенс... хотя мне больше импонирует идея с Partial Mock подходом.

Однако энивэй спасибо за помощь!

-~{}~ 06.07.06 01:42:

Necromant
Ой, что-то я не уловил про интерфейсы. Что это за обязательное условие? К чему они здесь?
 

denver

?>Скриптер
Necromant
Спасиб, я в курсе про итерфейсы вообще, просто не понял к чему они тут.
 
Сверху