Есть много преимуществ для написания не пройденного теста.
Принципиально: если вы пишете проходной тест, вы не выполняете тестовую разработку, потому что разработка, которая заставляет тест пройти, произошладо теста был написан.Аналогично для тестового дизайна, если вы предпочитаете эту фразу (как я);дизайн, который привел к разработке, прошедшей тестирование, произошел до того, как вы написали тест.Но это, в некоторой степени, просто определение;условия и процесс TDD могут быть не так важны для вас.
На более практическом уровне неудачные тесты приводят к меньшим решениям.Когда вы пишете достаточно кода, чтобы пройти один неудачный тест, вы (часто) добавляете лишь немного к тому, что у вас было раньше.Вы знаете, что этот новый бит является частью вашего кода, которая удовлетворяет этому тесту;Вы знаете, почему это там.А затем вы пишете следующий неудачный тест для следующего небольшого добавочного кусочка функциональности.Вы не переоцениваете свое решение;вы строите достаточно.
Поскольку неудачные тесты ведут вас к поэтапной разработке, ваш процесс разработки становится лучше.Вместо длительных периодов незаметного кодирования, перемежающегося безумными эпизодами отладки и отбрасывания, вы неуклонно продвигаетесь вперед.Когда вы отбрасываете, то, что вы отбрасываете, очень мало;легко начать все сначала, потому что вы не тратите часы или дни работы.Когда вы отлаживаете, вы знаете, что проблема (очень вероятно) в очень маленькой части нового кода.
Неудачные тесты информируют вас о вашем коде и (что более важно) о вашем понимании вашего кода;они говорят вам: «Да, ваше понимание того, что код не выполняет X, является правильным, и вы выразили это понимание правильно и конкретно», или «Нет - что-то не так».С другой стороны, новые проходящие тесты говорят только «Да, похоже, это работает», но иногда это может быть из-за неправильного теста.