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