Я отвечу на ваш вопрос более подробно ниже после того, как дам некоторую информацию о TDD.
Помните, что TDD на самом деле является процессом проектирования, который включает в себя модульное тестирование и следование Red-Green-Refactorцикл.Это процесс проектирования, потому что в каждой итерации Red-Green-Refactor вы сначала пишете тест для несуществующего кода.Вы разрабатываете по ходу дела.
Первая прелесть TDD в том, что дизайн вашего кода гарантированно будет тестируемым.Тестируемый код имеет слабую связь и высокую когезию.Слабая связь и высокая когезия важны, потому что они позволяют легко изменять код при изменении требований.Вторая прелесть TDD заключается в том, что после того, как вы завершите внедрение своей системы, у вас появится огромный набор регрессий, позволяющий обнаруживать любые ошибки и изменения в предположениях.Таким образом, TDD позволяет легко изменять ваш код из-за создаваемого им дизайна, а также делает ваш код безопасным для изменения благодаря создаваемой им проверочной программе.
Теперь, чтобы ответить на ваш вопрос.Поскольку TDD - это процесс проектирования, а не процесс тестирования, он помогает использовать TDD в той части кода, которая является разумной, поскольку везде, где вы его используете, ваш дизайн будет выигрывать от процесса TDD.На самом деле, я предпочитаю начинать реализацию функций, начиная с клиента, потому что это помогает мне сначала сосредоточиться на клиентских сценариях (см. Эту ссылку о Presenter First для получения дополнительной информации).Как правило, как это работает, если я что-то реализую с помощью Model-View-Controller / Model-View-Presenter / Model-View-ViewModel, я начну использовать TDD с Controller / Presenter / ViewModel, не буду тестироватьпредставление, потому что это будет тонкая обертка без логики (и ее реализация и поддержка для проверки представлений с помощью автоматических тестов дорогостоящая), и она будет перемещать вещи в модель, как это имеет смысл.