Gdy wystąpią poważne zmiany w kodzie (nowy zestaw POJO, refaktoryzacja dużych aplikacji itp.), Testy jednostkowe są raczej komentowane niż przerabiane.
Zawsze staram się trzymać osobno refaktoryzację i zmianę funkcjonalności. Kiedy muszę wykonać obie te czynności, zwykle najpierw dokonuję refaktoryzacji.
Podczas refaktoryzacji kodu bez zmiany funkcjonalności istniejące testy jednostkowe powinny pomóc upewnić się, że refaktoryzacja nie zepsuje funkcjonalności przypadkowo. Tak więc dla takiego zatwierdzenia uważam wyłączenie lub usunięcie testów jednostkowych za główny znak ostrzegawczy. Każdy programista, który to robi, powinien zostać poinformowany, aby tego nie robił podczas sprawdzania kodu.
Możliwe, że zmiany, które nie zmieniają funkcjonalności, nadal powodują niepowodzenia testów jednostkowych z powodu wadliwych testów jednostkowych. Jeśli rozumiesz zmieniany kod, to przyczyną takich niepowodzeń testu jednostkowego jest zwykle natychmiast oczywista i łatwa do naprawienia.
Na przykład, jeśli funkcja pobiera trzy argumenty, test jednostkowy obejmujący interakcję między dwoma pierwszymi argumentami dla funkcji mógł nie zadbać o podanie prawidłowej wartości trzeciego argumentu. Ta wada w teście jednostkowym może zostać ujawniona przez refaktoryzację testowanego kodu, ale łatwo go naprawić, jeśli zrozumiesz, co powinien zrobić kod i co testuje test jednostkowy.
Podczas zmiany istniejącej funkcjonalności zwykle konieczna będzie również zmiana niektórych testów jednostkowych. W takim przypadku testy jednostkowe pomagają upewnić się, że kod zmienia funkcjonalność zgodnie z przeznaczeniem i nie ma niezamierzonych skutków ubocznych.
Podczas naprawiania błędów lub dodawania nowej funkcjonalności zwykle trzeba dodać więcej testów jednostkowych. Dla tych może być pomocne najpierw zatwierdzenie testów jednostkowych, a następnie poprawka błędu lub nowa funkcjonalność później. Ułatwia to sprawdzenie, czy nowe testy jednostkowe nie przeszły ze starszym kodem, ale przeszły z nowszym kodem. Takie podejście nie jest jednak całkowicie pozbawione wad, dlatego istnieją również argumenty przemawiające za jednoczesnym przeprowadzaniem zarówno nowych testów jednostkowych, jak i aktualizacji kodu.
Lepiej poświęcić czas na testy integracyjne obejmujące przypadki użycia, dzięki którym testy o mniejszym zasięgu są mniej / wcale nie ważne.
Jest w tym pewien element prawdy. Jeśli możesz uzyskać pokrycie dolnych warstw stosu oprogramowania testami skierowanymi na wyższe warstwy stosu oprogramowania, Twoje testy mogą być bardziej pomocne podczas refaktoryzacji kodu.
Nie sądzę jednak, abyś znalazł zgodę na dokładne rozróżnienie między testem jednostkowym a testem integracyjnym. I nie martwiłbym się, jeśli masz przypadek testowy, który jeden programista nazywa testem jednostkowym, a drugi testem integracji, o ile mogą zgodzić się, że jest to przydatny przypadek testowy.