TDD - это способ разработки прежде всего. Это больше относится к архитектуре и дизайну приложений. Когда вы пишите тесты - вы придумаваете архитектуру своего приложения: модель, её связи и т.п. Взглянув на тесты вы должны понять что и как делает ваше приложение.
Грубый пример: вы хотите написать приложение которое пересылает деньги с одного аккаунта на другой. Начав писать, к примеру, тест "Должна быть ошибка при отрицательном балансе первого аккаунта", вы пока не имеете никакой модели (классов) вовсе. Поэтому вы начинаете продумывать как всё будет устроено прямо в тесте: мне нужен класс AccountService для того чтобы делать переводы, класс Account, который содержит информацию о счёте и т.д. Написав логику, конечно тест будет "красным" т.к. вы ещё не написали таких классов, НО теперь самое время сделать так, чтобы тест стал "зелёным" - написать эти классы и лишь ту бизнес-логику, которую проверяет тест.