На каком-то уровне это внутреннее чувство
«Уверен ли я, что тесты поймут все проблемы, о которых я могу думать?
сейчас? "
На другом уровне у вас уже есть набор пользовательских или системных требований, которые должны быть выполнены, чтобы вы могли на этом остановиться.
Хотя я и использую покрытие кода, чтобы сообщить мне, что я не следую своему процессу TDD, и найти код, который можно удалить, я бы не посчитал покрытие кода полезным способом узнать, когда следует остановиться. Ваше покрытие кода может быть на 100%, но если вы забыли включить требование, ну, значит, вы на самом деле не закончили.
Возможно, заблуждение о TDD заключается в том, что вы должны знать все заранее, чтобы протестировать. Это ошибочно, потому что тесты, которые являются результатом процесса TDD, похожи на крошечный след. Вы знаете, что было проверено в прошлом, и можете в какой-то степени помочь вам, но это не скажет вам, что делать дальше.
Я думаю, что TDD можно рассматривать как эволюционный процесс. То есть вы начинаете с вашего первоначального дизайна и его набора тестов. По мере того, как ваш код подвергается критике в процессе производства, вы добавляете больше тестов и код, который делает эти тесты успешными. Каждый раз, когда вы добавляете тест здесь, и тест там, вы также делаете TDD, и это не стоит слишком много. Вы не знали, что такие случаи существовали, когда писали свой первый набор тестов, но теперь вы приобрели знания и можете проверять эти проблемы одним нажатием кнопки. Это великая сила TDD, и одна из причин, почему я так за нее отстаиваю.