Дело не в том, что они будут повторять код. А в том, что разработчик знает, как его код работает, даже если будет тестировать только интерфейс. И он теперь знает как его тестировать. И сможет даже схитрить.
А в случае, если тест написан «до». То есть четкие критерии, хитри, не хитри, придется написать код, который будет им соответствовать.
Зачем тогда придумали моки, если мы тестируем черный ящик? =))
Он увидел то, что хотел увидеть. Любой адепт TDD поймет, что это просто стеб, не иначе.
Блин, я чертовски расстроен. Я думал, что у нас в Украине с отношением к качеству кода и с понимаем того к качеству прийти, всё гораздо лучше.
Эх, вы! Ленивые задницы! Признайтесь честно, лучше сразу, что вы не писали больше года с TDD и не пробовали покорить подход «Test First», но готовы с легкостью критиковать TDD и защищать свой подход. Потому как вам лень развиваться и двигаться дальше, лень напрягать мозг.
Нет, это очень условно. Очень легко себя обмануть и упростить тест в голове, а где нужно его вообще избежать. А если его написал и зафиксировал, то всё уже не получиться как-то схитрить.
Что самое важное в разработке ПО? Это управление сложностью. Вы будете скрывать сложные вещи на каждом уровне абстракции и это позволит их сделать примитивными или простыми для других. Это же очевидно, такие вещи и можно тестировать.
Давайте ваш аргумент, почему сложно писать тесты вначале?
Я к чему это спрашивал.
То есть мы пишем тесты после, что убедиться, что работает и отрефакторить код?
Но это не честно, так как мы уже написали код и будем (чаще всего) подгонять тесты под него, какой смысл от таких тестов? Если они просто повторяют написанный код.
Какой пример, такой и ответ. Мне кажется вы не готовы слушать и вы не открыты к дискуссии. Давайте попробуем по-другому.
Вы привели пример кода, который заведомо нарушает хорошие принципы проектирования, а именно вы нарушаете инкапсуляцию (в широком смысле слова), вы в этой цепочке вызовов показываете, что знаете полную структуру и полную цепочку и как именно вам нужно достать необходимые вам данные.
Да это же смешно. Я должен был пропустить ваш провокационный комментарий, но я показал вам условный тест на псевдо-языке в одну строчку. Хотите напишите мне кусок кода, который нужно протестировать на любом языке и его протестирую. НО! Суть не в этом, а в том, что в реальной жизни такой ерунды не будет, а будет задача, будет простой тест и простая реализация.
Еще раз, давайте конкретные примеры. Иначе наши комментарии становятся слишком абстрактными, что дает вам возможность легко подменять понятия и делать выводы лишенные подтверждения.
Даже с вашим абстрактным примером, я показал, что можно сделать лучше something.getFirstFooBarTitle().
Давайте конкретный пример и будем разбираться конструктивно.
Думаю верно для тех, кто уже умеет писать сначала тесты, а потом код. Для них качество, чаще будет одинаковым.
уже идёт проверка и первый рефакторинг. Удаляются 100500 закоменченых огрызков кода
Каким образом идет проверка? Как вы можете быть уверены, что все ОК, если удаляете 100500 строк кода и добавляете новые? Как вы проверяете, что все ОК?
Не представляю, какую поеб..нь нужно писать, что подход «сначала тесты» не сработал.
Убедиться работает ли? Так написали же как-то. Хотя бы раз же запускали его? Верно? Значит уже уверены, что работает.
Поддерживаю такие цепочки только в случае Fluent Interface, все остальные случаи — это код с запашком (ru.wikipedia.org/....B2.D0.BE.D0.B2)
Тесты не избавят от имитации бурной деятельности, но позволят её сократить в разы.
Раньше я вылавливал ошибки или рефакторил по несколько недель, искренне веря, что я работал, а не имитировал.
Дело не в «читабельности», а в том, что хрен его знает, что какой метод возвращает в цепочке и что хер потом такую цепочку уже отрефакторишь. Удалить просто так промежуточные звенья не получиться.
Давайте с другой стороны. Какой смысл писать тест после того как код написан? Ведь вы же уже знаете, что код работает. Что вам это даёт?
Пишите пару ассертов, потом пол реализации, пару ассертов и еще пол реализации, так?
Под BDD подразумеваете Gherkin с описанием фич и сценариев или спеки xSpec? Или и то и другое?
Провоцирую