Перш за все, TDD не змушує вас строго писати код SOLID. Ви можете зробити TDD і створити один великий безлад, якщо хочете.
Звичайно, знання принципів SOLID допомагає, бо в іншому випадку ви просто не зможете добре відповісти на багато своїх проблем, а значить, написати поганий код у супроводі поганих тестів.
Якщо ви вже знаєте про принципи SOLID, TDD спонукає вас думати про них та активно їх використовувати.
Однак, це не обов'язково охоплює всі літери SOLID , але це настійно заохочує і спонукає вас написати хоча б частково SOLID-код, оскільки це робить наслідки того, що ви не будете робити це одразу видно і дратує.
Наприклад:
- Вам потрібно написати розв'язаний код, щоб ви могли знущатися над тим, що вам потрібно. Це підтримує принцип інверсії залежності .
- Вам потрібно написати чіткі і короткі тести, щоб не довелося занадто сильно змінювати тести (які можуть стати великим джерелом шуму коду, якщо це зроблено інакше). Це підтримує принцип єдиної відповідальності .
- Про це можна сперечатися, але Принцип розбиття інтерфейсу дозволяє класам залежати від більш легких інтерфейсів, які полегшують глузування та розуміння, тому що вам не потрібно запитувати "Чому не було також знущалися з цих 5 методів?", Або що ще важливіше, у вас немає великого вибору при вирішенні методу знущання. Це добре, коли ви насправді не хочете переглядати весь код класу перед тим, як перевірити його, а просто використовуйте пробну помилку та помилку, щоб отримати базове розуміння того, як він працює.
Дотримання принципу "Відкрито / закрито" може допомогти тестам, записаним після коду, оскільки він зазвичай дозволяє переосмислювати зовнішні виклики служб у тестових класах, що походять від тестованих класів. У TDD я вважаю, що це не так потрібно, як інші принципи, але я можу помилятися.
Дотримуватися правила заміни Ліскова чудово, якщо ви хочете мінімізувати зміни для вашого класу, щоб отримати непідтримуваний екземпляр, який просто трапляється реалізувати той самий статично типовий інтерфейс, але це, швидше за все, не станеться у правильних тестових випадках, оскільки ви як правило, не буде проходити жодного класу під тестуванням реальної реалізації його залежностей.
Найголовніше, що принципи SOLID були розроблені для того, щоб заохочувати писати більш чистий, зрозумілий і доступний код, і це було TDD. Тож якщо ви правильно зробите TDD, і ви звернете увагу на те, як виглядають ваш код та ваші тести (і це не так складно, оскільки ви отримуєте негайний зворотній зв'язок, API та правильність), ви можете менше турбуватися про принципи SOLID.