Автор оригинала: whirlwind
Разработка на основе тестов, а не тестирование уже написанного. Разницу чуешь?
Вот пример твоего тестового кода:
Автор оригинала: whirlwind
PHP:
public function testGetBalance(){
...
$o = $this->getMock('PSO_LibertyReserve_Operator',
Array('createBalanceRequest','doRequest',
'analyseLrResponse','parseBalance'));
...
$o->expects($this->once())
->method('doRequest')
->will($this->returnValue('<bar></bar>'));
...
$amount = $o->getBalance($acc);
$this->assertEquals(100500,$amount);
}
На момент написания теста, если это tdd, у тебя можеть быть лишь интерфейс класс. А то, что ты моком заменяешь целый набор защищенных методов намекает на то, что класс написан раньше теста. К тому же концепция tdd, когда ты пишешь "грязный" код, чтобы тест прошел, а потом начинаешь этот код рефакторить, следя за тем, чтобы тест выполнялся у тебя нереализуема, т.к. у тебя тест связан с внутренней реализацией класса.
Автор оригинала: whirlwind
С чего ты взял что лучше? Этот метод был введен намеренно, для того что бы избавиться от зависимости транспортного уровня в тестах, которые никакого отношения к этому самому транспорту не имеют. Где в коде видно, что в работе не используется впрыск зависимого объекта? Стабы для того и придумали, что бы не заморачиваться эмулированием всей необходимой фикстуры а просто настроить 1 метод.
Ну можно настроить 1 метод "объекта-транспорта" и внедрить его в тестируемый объект. Это не сложнее.
-~{}~ 25.02.08 01:36:
Хочу резюмировать вышесказанное.
Одна из целей модульного тестирования - документирование, показать, как
пользоваться классом (а не как он устроен) . Притом показать в простом контексте, чтобы легко было понять (иначе человека можно сразу отправлять изучать реальный код
). Поэтому если мы начинаем тестировать защищенные методы, то для того, чтобы понять тест, нам надо изучить внутреннюю реализацию тестируемого класса.
Ещё одна из целей тестирования - безболезненный рефакторинг. Но как только мы связываем тест с внутренний реализацией класса, он становиться затруднен или совсем невозможен.
Так что я однозначно против тестирования защищенных методов.
p.s. и против использования частичных моков