Проблема действительно не в TDD и не в Python. Прежде всего, TDD не дает вам доказательства того, что после прохождения всех ваших тестов ваше приложение будет в порядке. Представьте себе, например, Функция multiplyBy2 (), которую можно протестировать с помощью входных данных 1,2,3 и выходных 2,4,8, а теперь представьте, что вы реализовали multiplyBy2 как возведение в квадрат. Все ваши тесты пройдены, у вас 100% покрытие кода, и ваша реализация неверна. Вы должны понимать, что TDD может только дать вам гарантию, что если ваш тест не пройден, что-то не так с вашим приложением, ни больше, ни меньше. Таким образом, как предлагается в другом ответе, проблема в том, что у вас нет теста, который не проходит. Если бы вы использовали какой-то статически типизированный язык, компилятор сделал бы для вас этот тест и пожаловался бы на использование несуществующего метода. Это не означает, что вы должны использовать статически типизированный язык, это просто означает, что вам нужно написать больше тестов на динамически типизированном языке.
Если вы заинтересованы в обеспечении правильности кода, вам следует взглянуть на проектирование по контракту для обеспечения корректности, по крайней мере, во время выполнения и формальных спецификаций, чтобы иметь доказательства по крайней мере для некоторых алгоритмов, но это, я думаю, довольно далеко от стандартного кодирования. *