Я думаю, что всем не хватает критической точки - как вы ЗНАЕТЕ, что желаемый метод еще не существует? Написание модульного теста, который вызывает метод, который еще не должен существовать, с последующим наблюдением за его ошибкой, подтверждает, что ваше предположение верно. На скомпилированном языке он не должен компилироваться. В некомпилированном языке неудачное выполнение может быть гораздо быстрее, чем проверка API. В большинстве языков наследование и полиморфизм могут привести к появлению метода, который не был зарегистрирован в вашей ментальной модели API.
В редких случаях вы можете обнаружить, что метод действительно существует (и IntelliSense также может помочь обнаружить это), и вы можете понять, что вам нужно изменить сигнатуру нужного метода. Или вы можете даже обнаружить, что вам вообще не нужно писать этот метод (возможно, вы написали его на прошлой неделе, но забыли).
Конечно, вы можете пропустить первые два шага или вообще отказаться от TDD, но у этих шагов была цель. Тем не менее я согласен с общим мнением о том, что мы всегда можем извлечь пользу из более подробного описания обоснования таких шагов в любой «наилучшей практике».
РЕДАКТИРОВАТЬ: От Джастина Стандарт ...
Или если вы работаете в команде разработчиков и лично не пишете код
вы полагаетесь. Я думаю, что это довольно распространенный сценарий для большинства разработчиков.
РЕДАКТИРОВАТЬ: Из Senfo ...
Если у вас возникли проблемы с отслеживанием того, какие методы были реализованы в базе
классы, мне кажется, что ваша иерархия наследования слишком сложна. Я все еще проголосовал
вы, потому что я согласен, что мне нужно больше времени, чтобы убедиться, что метод не
существует, если я начну с модульного теста.
@ senfo: Конечно, может возникнуть слишком большая сложность в иерархии наследования, но это другая проблема с очевидным решением. Даже если ваш существующий код совершенен, все равно полезно начать с модульного теста, который пытается вызвать, возможно, несуществующий метод, просто чтобы быстро доказать себе, что он не существует. Конечно, пропуск этого шага понятен - я мог бы вернуться к нему в конкретной ситуации, когда мой тест плохо себя ведет (чтобы убедиться, что в этой конкретной ситуации я не вызываю ничего, кроме того, что только что написал).