На практике, гарантируя, что тест не пройден до того, как он пройдет. TDD волшебным образом не удаляет все возможности для ошибок в вашем коде, он, надеюсь, уменьшает количество ошибок, но это более важно как метод проектирования.
Где действительно улучшается количество ошибок, это когда вы рефакторинг. Тесты много раз спасали мой бекон, когда я проводил рефакторинг, и нарушали какое-то старое поведение, которое было установлено тестом.
Если тест не пройден до того, как он пройден, вы можете быть уверены, что код, который вы реализуете, на самом деле ведет себя так, что делает тест пройденным, что делает тест действительным. Если вы изменяете код, который нарушает тесты, вам нужно подумать о том, какой из них правильный, и внести соответствующие изменения.
Когда я читаю ваш вопрос, я вижу основное ожидание того, что TDD предотвратит все ошибки. Не будет Но это помешает некоторым. Что еще более важно, это предотвратит ошибки при рефакторинге, что позволит вам со временем улучшать свой дизайн, не опасаясь регресса.
Но где TDD действительно сияет, так это в дизайне вождения. Это может гарантировать, что проект должным образом учитывает зависимости, является модульным и выполняет то, что от него ожидали (в отличие от правильных действий - это должно быть частью интеграционного или приемочного тестирования).
Редактировать: (В ответ на комментарий) Я понял ваш вопрос и пытался ответить на него. Поскольку я не был так успешен, я попробую еще раз.
Если тест сначала считается провальным, а затем пройденным, обрабатывается базовое представление о том, что в нем есть ошибка, из-за которой он ничего не тестирует (код проверяет тест, а тест тестирует код). Это явно зависит от передаваемого производственного кода, поэтому он что-то тестирует. Более того, это не может сделать. Существуют дополнительные уровни тестирования (интеграция, принятие, возможно, общий контроль качества), которые решают более глубокие проблемы.
Но моя главная задача состояла в том, чтобы оспорить то, что, как я понимаю, является предпосылкой вопроса: как TDD может обеспечить 100% безошибочный код, если в самих тестах могут быть ошибки. Мой ответ на это предположение, что он не может. Это делает что-то еще (дизайн дисков). Я надеюсь, что это проясняет ситуацию.