W naszej grupie produktów skupiamy 50-70% pokrycia kodu z testów jednostkowych i 90% + pokrycia z testów jednostkowych i automatyzacji testów łącznie. Typowy czas przewidziany na pisanie testów jednostkowych wynosi około 1 dnia na każdą funkcję, która wymaga 3-4 dni kodowania. Ale może się to różnić wieloma czynnikami.
99% pokrycia kodu jest świetne. Testy jednostkowe są świetne. Ale 99% pokrycia kodu z samych testów jednostkowych? Trudno mi uwierzyć, że można uzyskać tak duży zasięg z samych testów jednostkowych .
W przypadku, gdy spędziłeś 3 dni na pisaniu testów dla klasy, której wdrożenie zajęło 1 dzień. Nie wyjaśniłeś, dlaczego zajęło to tyle czasu, ani nie podzieliłeś się żadnym kodem. Ze spekulacji zgaduję, że tak naprawdę nie pisałeś prawdziwego testu jednostkowego dla swojej klasy, ale pisałeś automatyzację testów . I tak naprawdę nie ma w tym nic złego - pod warunkiem, że rozpoznasz różnicę między dwoma różnymi typami testów.
Ale powiedziałeś, że trzy dni pisania testu były tylko dla jednej klasy. Być może sama klasa nie została zaprojektowana do testów jednostkowych. Czy klasa implementuje interfejs użytkownika? Sieć? Plik I / O? Jeśli tak, być może napisałeś więcej kodu do przetestowania środowiska wykonawczego Java niż logika biznesowa, która współdziała z środowiskiem wykonawczym.
TDD pozwala myśleć w kategoriach interfejsów i interfejsów do zależności. Ta pojedyncza klasa, która implementuje interfejs użytkownika, sieć i plik / io dla jednej funkcji, może być lepiej obsługiwana w podziale na wiele klas - jedna dla sieci, jedna dla pliku / io, a interfejs użytkownika podzielony na projekt modelu-kontrolera-przeglądarki. Następnie możesz zaimplementować odpowiednie testy dla każdego z prostymi próbnymi obiektami dla zależności. Oczywiście wszystko to zajmuje więcej czasu. Zatem zamiast 1 dnia pisania kodu i 3 dni pisania testów, ten typ projektu może wymagać 3 dni pisania kodu i 1 dnia testów pisania. Ale kod będzie znacznie łatwiejszy w utrzymaniu i wielokrotnego użytku.