Staram się owinąć głowę wokół TDD, a konkretnie części programistycznej. Przeglądałem niektóre książki, ale te, które znalazłem, dotyczą głównie części testowej - Historii NUnit, dlaczego testowanie jest dobre, Red / Green / Refactor i jak stworzyć kalkulator strun.
Dobre rzeczy, ale to „tylko” testy jednostkowe, a nie TDD. W szczególności nie rozumiem, w jaki sposób TDD pomaga mi uzyskać dobry projekt, jeśli potrzebuję go, aby rozpocząć testowanie.
Aby to zilustrować, wyobraź sobie następujące 3 wymagania:
- Katalog musi zawierać listę produktów
- Katalog powinien pamiętać, które produkty oglądał użytkownik
- Użytkownicy powinni mieć możliwość wyszukiwania produktu
W tym momencie wiele książek wyciąga magicznego królika z kapelusza i po prostu zagłębia się w „Testowanie usługi produktu”, ale nie wyjaśniają, w jaki sposób doszli do wniosku, że istnieje usługa produktu. To jest część „Rozwój” w TDD, którą próbuję zrozumieć.
Musi istnieć istniejący projekt, ale nigdzie nie można znaleźć rzeczy poza usługami encji (to znaczy: istnieje Produkt, więc powinna istnieć Usługa Produktu) (np. Drugi wymóg wymaga ode mnie pewnej koncepcji Użytkownik, ale gdzie mam umieścić funkcję przypominania? Czy funkcja wyszukiwania jest funkcją usługi ProductService lub osobnej usługi wyszukiwania? Skąd mam wiedzieć, którą wybrać?)
Według SOLID potrzebowałbym UserService, ale jeśli zaprojektuję system bez TDD, mogę skończyć z całą gamą usług Single-Method Services. Czy TDD nie ma przede wszystkim skłonić mnie do odkrycia mojego projektu?
Jestem programistą .net, ale zasoby Java również by działały. Wydaje mi się, że nie ma prawdziwej przykładowej aplikacji ani książki, która dotyczyłaby prawdziwej aplikacji biznesowej. Czy ktoś może podać jasny przykład ilustrujący proces tworzenia projektu przy użyciu TDD?