Прежде всего, TDD не заставляет вас строго писать код SOLID. Вы можете сделать TDD и создать один большой беспорядок, если хотите.
Конечно, знание принципов SOLID помогает, потому что в противном случае вы можете просто не получить хорошего ответа на многие ваши проблемы и, следовательно, написать плохой код, сопровождаемый плохими тестами.
Если вы уже знакомы с принципами SOLID, TDD предложит вам подумать о них и активно их использовать.
Тем не менее, он не обязательно покрывает все буквы в SOLID , но он настоятельно рекомендует и поощряет вас писать хотя бы частично SOLID код, потому что это делает последствия того, что вы делаете это не сразу, видимыми и раздражающими.
Например:
- Вам нужно написать несвязанный код, чтобы вы могли высмеивать то, что вам нужно. Это поддерживает принцип инверсии зависимости .
- Вам нужно написать тесты, которые будут четкими и краткими, чтобы вам не пришлось слишком сильно менять их в тестах (которые могут стать большим источником шума кода, если это будет сделано иначе). Это поддерживает принцип единой ответственности .
- С этим можно поспорить, но принцип сегрегации интерфейса позволяет классам зависеть от более легких интерфейсов, которые упрощают отслеживание и понимание mocking, потому что вам не нужно спрашивать: «Почему эти 5 методов также не подвергались насмешкам?», Или что еще более важно, у вас нет большого выбора, когда вы решаете, какой метод издеваться. Это хорошо, когда вы на самом деле не хотите просматривать весь код класса перед его тестированием и просто использовать метод проб и ошибок, чтобы получить общее представление о том, как он работает.
Соблюдение принципа Open / Closed вполне может помочь тестам, которые написаны после кода, поскольку обычно позволяет переопределять внешние вызовы служб в тестовых классах, производных от тестируемых классов. В TDD я считаю, что это не так необходимо, как другие принципы, но я могу ошибаться.
Придерживаться правила подстановки Лискова - это замечательно, если вы хотите минимизировать изменения для вашего класса, чтобы получить неподдерживаемый экземпляр, который просто реализует тот же интерфейс со статической типизацией, но это вряд ли произойдет в надлежащих тестовых случаях, потому что вы как правило, не собирается проходить тестируемый класс реальных реализаций его зависимостей.
Самое важное, что принципы SOLID были созданы, чтобы побудить вас писать более чистый, понятный и понятный код, как и TDD. Поэтому, если вы правильно выполняете TDD и обращаете внимание на то, как выглядит ваш код и ваши тесты (и это не так сложно, потому что вы получаете немедленную обратную связь, API и правильность), вы можете меньше беспокоиться о принципах SOLID в целом.