Это может быть довольно глупый вопрос, так как я нахожусь на моих первых попытках TDD. Мне нравилось чувство уверенности, которое оно приносит, и вообще лучшая структура моего кода, но когда я начал применять его на чем-то большем, чем одноклассные игрушечные примеры, я столкнулся с трудностями.
Предположим, вы пишете какую-то библиотеку. Вы знаете, что он должен делать, вы знаете общий способ его реализации (с точки зрения архитектуры), но вы продолжаете «открывать», что вам нужно вносить изменения в ваш публичный API во время написания кода. Возможно, вам нужно трансформировать этот закрытый метод в шаблон стратегии (и теперь вам нужно пропустить поддельную стратегию в ваших тестах), возможно, вы не туда-сюда возложили ответственность и разделили существующий класс.
Когда вы улучшаете существующий код, TDD кажется действительно подходящим вариантом, но когда вы пишете все с нуля, API, для которого вы пишете тесты, выглядит немного «размытым», если вы не делаете большой дизайн заранее. Что вы делаете, когда у вас уже есть 30 тестов для метода, чья сигнатура (и для этой части, поведение) изменилась? Это много тестов, которые нужно изменить, как только они сложатся.