Załóżmy, że mam menedżera klas wywodzącego się z pracownika klasy podstawowej i że pracownik ma metodę getEmail (), która jest dziedziczona przez menedżera . Czy powinienem sprawdzić, czy zachowanie metody getEmail () menedżera jest w rzeczywistości takie samo jak zachowanie pracownika?
W momencie pisania tych testów zachowanie będzie takie samo, ale oczywiście w pewnym momencie w przyszłości ktoś może zastąpić tę metodę, zmienić jej zachowanie, a zatem zepsuć moją aplikację. Jednak wydaje się nieco dziwne, aby zasadniczo przetestować pod kątem braku wtrącania się kodu.
(Należy pamiętać, że testowanie metody Manager :: getEmail () nie poprawia pokrycia kodu (ani nawet żadnych innych wskaźników jakości kodu (?)) Do momentu utworzenia / zastąpienia Manager :: getEmail () .)
(Jeśli odpowiedź brzmi „Tak”, przydatne byłyby pewne informacje na temat zarządzania testami dzielonymi między klasami podstawowymi i pochodnymi).
Równoważne sformułowanie pytania:
Jeśli klasa pochodna dziedziczy metodę z klasy podstawowej, jak wyrazić (przetestować), czy oczekuje się, że odziedziczona metoda:
- Zachowuj się dokładnie tak samo jak obecnie baza (jeśli zachowanie bazy zmienia się, zachowanie metody pochodnej nie zmienia się);
- Zachowuj się dokładnie tak samo jak baza przez cały czas (jeśli zmieni się zachowanie klasy podstawowej, zmieni się również zachowanie klasy pochodnej); lub
- Zachowuj się jednak, jak chce (nie obchodzi cię zachowanie tej metody, ponieważ nigdy jej nie nazywasz).
Manager
z klasyEmployee
było pierwszym poważnym błędem.