Dużo słyszę od praktyków TDD , że jedną z zalet TDD jest to, że zmusza programistów do przestrzegania zasad SOLID (pojedyncza odpowiedzialność, otwarte zamknięcie, podstawienie Liskowa, segregacja interfejsu i inwersja zależności). Ale jak dla mnie wystarczy napisać kilka testów (przede wszystkim test jednostkowy), aby zrozumieć, że ważne jest, aby postępować zgodnie z SOLID (a tym samym stworzyć architekturę do testowania).
Czy TDD zmusza programistów do aktywniejszego śledzenia SOLID niż pisania testów jednostkowych?
unit-testing
tdd
solid
SiberianGuy
źródło
źródło
Odpowiedzi:
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:
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.
źródło
Nie
TDD może ułatwić przestrzeganie dobrych praktyk z powodu ciągłego refaktoryzacji, ale nie zmusza do przestrzegania żadnej zasady. Wystarczy upewnić się, że kod, który piszesz, jest testowany. Podczas pisania kodu możesz przestrzegać dowolnych zasad; lub w ogóle żadnych zasad.
źródło
Moje zrozumienie zasad SOLID rozszerzyło się o rząd wielkości, kiedy zacząłem robić TDD. Gdy tylko zacząłem myśleć o tym, jak wyśmiewać zależności, zdałem sobie sprawę, że praktycznie każdy komponent w bazie kodu ma potencjalną alternatywną implementację. I o ile łatwiej jest przetestować prosty publiczny interfejs API.
Zapewniło także znacznie lepsze zrozumienie większości wzorów projektowych. Zwłaszcza wzorzec strategii.
źródło
Tak : TDD jest głównie dobrą techniką projektową (i jedynie wtórną techniką testowania). Bardzo pomaga to w osiągnięciu solidnych zasad, chociaż (patologiczne) przykłady TDD z dużą ilością zapachów kodu są nadal możliwe.
Związek między TDD a solidnymi zasadami jest kwestionowany (z powyższym wnioskiem) w tym wielkim podcastu Hanselminute o nazwie „Test Driven Development is Design - The Last Word on TDD” .
źródło