Przede wszystkim TDD nie zmusza Cię do pisania kodu SOLID. Możesz zrobić TDD i stworzyć jeden wielki bałagan, jeśli chcesz.
Oczywiście znajomość zasad SOLID pomaga, ponieważ w przeciwnym razie możesz po prostu nie mieć dobrej odpowiedzi na wiele twoich problemów, a tym samym napisać zły kod, któremu towarzyszą złe testy.
Jeśli znasz już zasady SOLID, TDD zachęci Cię do przemyślenia ich i aktywnego korzystania z nich.
To powiedziawszy, niekoniecznie obejmuje wszystkie litery w SOLID , ale zdecydowanie zachęca i promuje napisanie przynajmniej częściowo SOLIDNEGO kodu, ponieważ powoduje, że konsekwencje nie zrobienia tego są natychmiast widoczne i irytujące.
Na przykład:
- Musisz napisać oddzielony kod, aby wyśmiewać to, czego potrzebujesz. Jest to zgodne z zasadą inwersji zależności .
- Musisz napisać testy, które są jasne i krótkie, abyś nie musiał zbyt wiele zmieniać w testach (które mogą stać się dużym źródłem szumu w kodzie, jeśli zrobisz inaczej). Wspiera to zasadę pojedynczej odpowiedzialności .
- Można to spierać, ale zasada segregacji interfejsów pozwala klasom polegać na lżejszych interfejsach, które ułatwiają śledzenie i zrozumienie szyderstwa, ponieważ nie trzeba pytać „Dlaczego nie wyśmiano również tych 5 metod?” Lub co ważniejsze, nie masz dużego wyboru przy podejmowaniu decyzji, którą metodę wyśmiewać. Jest to dobre, gdy tak naprawdę nie chcesz przejrzeć całego kodu klasy przed jego przetestowaniem, i po prostu użyj prób i błędów, aby uzyskać podstawowe zrozumienie tego, jak to działa.
Przestrzeganie zasady Open / Closed może pomóc testom napisanym po kodzie, ponieważ zwykle pozwala na zastąpienie wywołań usług zewnętrznych w klasach testowych, które pochodzą z testowanych klas. W TDD uważam, że nie jest to tak wymagane, jak inne zasady, ale mogę się mylić.
Przestrzeganie zasady podstawiania Liskowa jest świetne, jeśli chcesz zminimalizować zmiany w swojej klasie, aby otrzymać nieobsługiwaną instancję, która akurat implementuje ten sam interfejs o typie statycznym, ale prawdopodobnie nie zdarzy się to we właściwych przypadkach testowych, ponieważ jesteś generalnie nie przejdzie żadnej testowanej przez klasę implementacji swoich zależności w świecie rzeczywistym.
Co najważniejsze, stworzono zasady SOLID, aby zachęcić cię do pisania czystszego, bardziej zrozumiałego i łatwego w utrzymaniu kodu, podobnie jak TDD. Więc jeśli właściwie wykonujesz TDD i zwracasz uwagę na to, jak wygląda twój kod i twoje testy (i nie jest to takie trudne, ponieważ otrzymujesz natychmiastowe informacje zwrotne, API i poprawność), możesz ogólnie mniej martwić się zasadami SOLID.