Помогите плиз, разбираюсь с TDD, читаю PHPInside, оновременно стараюсь переосмыслить свой код. Должно быть это простой вопрос для вас.
Есть у меня класс XML, работает наподобие:
PHP:
class PageClass {
function show() {
$xml = new XML('html');
$xml->insert(
XML::element('body',
XML::element('h1', 'This is a header text'),
XML::element('p', 'paragraph goes here...'
XML::attribute('class', 'description')
)
)
);
echo $xml->output();
}
}
Узнал что статические методы плохо с точки зрения TDD.
Правильно ли я понимаю следующие Assertions:
1. Cтатические методы XML::element, XML::attribute плохо потому что тестировать PageClass нужно учитывая что методы XML::element и XML::attribute были протестированы и работают 100%, для этого обязательно нужно в тесте PageClass'a эмулировать их моками. Соответственно ну просто необходимо вынести их как отдельные классы типа XMLElement и XMLAttribute и тестировать PageClass с заглушками уже этих XMLElement и XMLAttribute. Это так?
2. Неужели проблема данных статических методов только в том что если вдруг неправильно работает класс XML то в тестах выскочит две ошибки (у обих классов) вместо одной (только у класса XML), это так?
-~{}~ 25.06.06 23:02:
Что смущает: с другой стороны нужно же весь XML делать большой заглушкой, ведь так? Разве нет способа заглушить статические методы?
PHP:
$xml = new MockXML('html');
$xml->insert(
MockXML::element('body',
...
Так поступать нельзя?
-~{}~ 26.06.06 10:21:
ок, сформулирую попроще.
Singletons и static methods это: (выбери один)
1.
некачественный ООП, потому что при грамотном ООП всегда грамотно реализуется и TDD (т.е. без повторения кода проверок и т.п.).
2.
вполне нормальный ООП однако лучше избегать при TDD т.к. TDD накладывает ограничения на ООП.
3. Свой вариант? Плиз напишите...