Powtarzającym się tematem, który spotkałem w mojej karierze, jest bycie nowym programistą w zespole i szybkie nieodłączne nieufność do istniejących testów jednostek i testów integracyjnych.
Podczas rozmowy kierownictwo informuje Cię, że „zdecydowanie wspierają testy jednostkowe” i otwarcie to zachęcają. Tak, ale wszystko w samych testach jest po prostu złe. Podobnie jak fakt, że twierdzą oni, że obejmują 100% pokrycia, gdy istnieje 100% pokrycia testem integracji, ale mniej niż 10% powtarzalnego pokrycia testem jednostkowym. Kilka innych problemów, które znalazłem:
Brak wyraźnego wskazania między tym, co jest testem jednostkowym, a tym, co jest testem integracyjnym. Testy jednostkowe i integracyjne są mieszane razem w tej samej klasie.
Testy integracyjne, w których nie zgłoszono jawnych zależności od bardzo konkretnych danych dynamicznych w bazie danych określonego środowiska.
Nietransakcyjne testy integracyjne, w zasadzie testy, które mogą, ale nie muszą, zadawać sobie trud czyszczenia po sobie, czasem wymagając ręcznego „czyszczenia” bazy danych, aby test był powtarzalny.
Żadnego kpiny, a kod aplikacji wymaga gruntownego przeglądu, aby kpina była możliwa. Innymi słowy, projektuj bez testowania.
Brak jasnych konwencji nazewnictwa pozwalających szybko spojrzeć na nazwę testu i z grubsza określić, jakie testy są wykonywane.
To wszystko nie oznacza, że WSZYSTKIE testy są bezużyteczne lub złe, znaczna ich część jest całkiem dobra i warta zachowania, ale czasami wydaje się, że płukanie złota jest czasem. Celowo unikałbym uruchamiania testów tylko dlatego, że bałam się zepsuć bazę danych dla moich przypadków testowych czarnej skrzynki.
Zasadniczo dało mi to wewnętrzną nieufność do testów jednostkowych i integracyjnych, których osobiście nie napisałem ani nie oceniłem w żaden sposób. Na pewnym poziomie, jeśli nie wierzysz w jakość swojego zestawu testów, to naprawdę nie przynosi żadnej wartości zespołowi ani projektowi.
Co robisz, gdy znajdziesz się w takiej sytuacji? Jaki według ciebie najlepszy plan ataku to poradzenie sobie z czymś takim?
Czy wszystkie testy powinny zostać zrefaktoryzowane w ramach ogromnego wysiłku obejmującego różne wersje? Czy powinieneś po prostu zrezygnować z pomysłu, że ten starszy projekt może być objęty jednodniowym testem jednostkowym?