Chcę przedstawić koncepcję testów jednostkowych (i testów ogólnie) moim współpracownikom; w tej chwili nie ma żadnych testów, a rzeczy są testowane poprzez wykonywanie zadań za pośrednictwem interfejsu użytkownika, aby zobaczyć pożądany wynik. Jak można sobie wyobrazić, kod jest bardzo ściśle powiązany z dokładną implementacją - nawet w wyniku tego kod, który powinien należeć do klasy i być ponownie wykorzystywany w całym systemie, jest kopiowany i wklejany w różnych metodach.
Ze względu na zmienione wymagania zostałem poproszony o zmodyfikowanie modułu, który wcześniej napisałem i który jest dość luźno powiązany (nie tak bardzo, jak bym chciał, ale najlepiej, jak mogę, bez konieczności wprowadzania wielu innych koncepcji). Zdecydowałem się dołączyć pakiet testów jednostkowych do mojego poprawionego kodu, aby „udowodnić”, że działa zgodnie z oczekiwaniami i zademonstrować, jak działa testowanie; Nie przestrzegam prawdziwego TDD, ponieważ część kodu jest już napisana, ale mam nadzieję, że zastosuję się do niektórych koncepcji TDD dla nowego kodu, który będę musiał utworzyć.
Teraz, nieuchronnie, jestem pewien, że zostaniesz zapytany, dlaczego napisanie kodu zajmuje mi więcej niż dzień lub dwa, skoro części tego, z czym będę wchodził w interakcje, już istnieją w systemie (choć bez żadnych testów i bardzo ściśle sprzężony), a kiedy sprawdzę kod, zostaniesz zapytany, co to za projekt „Testy”. Potrafię wyjaśnić podstawy testowania, ale nie potrafię wyjaśnić rzeczywistych korzyści w sposób zrozumiały dla innych (ponieważ ich zdaniem testowanie wymaga samodzielnego uruchomienia aplikacji, ponieważ często rzeczywisty interfejs użytkownika ma znaczenie przy określaniu, czy funkcja „działa” " albo nie). Nie rozumieją idei luźnego sprzężenia (wyraźnie widoczne przez fakt, że nic nie jest luźno sprzężone; nie ma nawet żadnych interfejsów poza kodem, który napisałem), więc próba wykorzystania tego jako korzyści prawdopodobnie przyniosłaby mi „Huh?” taki wygląd i znów nie mogę być tak swobodny, jak bym tego chciał, bez konieczności przerabiania kilku istniejących modułów i prawdopodobnie wprowadzenia pewnego rodzaju kontenera IoC, który byłby postrzegany jako marnowanie czasu, a nie „programowanie”.
Czy ktoś ma jakieś sugestie, w jaki sposób mogę wskazać ten kod i powiedzieć „Powinniśmy zacząć tworzyć testy jednostkowe”, nie odchodząc jako protekcjonalne (np. „Pisanie testów zmusza cię do napisania dobrego kodu”. z wyjątkiem tego, że mój jest zły ), czy też nie sprawia, że wydaje się to stratą czasu, która nie wnosi żadnej realnej wartości?