Предположим, у меня есть класс Manager, производный от базового класса Employee , и у этого Employee есть метод getEmail (), который наследуется Manager . Должен ли я проверить, что поведение метода getEmail () менеджера на самом деле такое же, как и у сотрудника?
На момент написания этих тестов поведение будет таким же, но, конечно, в какой-то момент в будущем кто-то может переопределить этот метод, изменить его поведение и, следовательно, сломать мое приложение. Тем не менее, кажется немного странным по существу проверять отсутствие вмешательства кода.
(Обратите внимание, что тестирование метода Manager :: getEmail () не улучшает покрытие кода (или даже любые другие показатели качества кода (?)) До тех пор, пока Manager :: getEmail () не будет создан / переопределен.)
(Если ответ «Да», будет полезна некоторая информация об управлении тестами, которые разделены между базовым и производным классами.)
Эквивалентная формулировка вопроса:
Если производный класс наследует метод от базового класса, как вы выражаете (тестируете), ожидаете ли вы, что унаследованный метод:
- Вести себя точно так же, как сейчас делает база (если поведение базы меняется, поведение производного метода не меняется);
- Вести все время точно так же, как и базовый (если меняется поведение базового класса, меняется и поведение производного класса); или
- Ведите, однако, то, что хотите (вас не волнует поведение этого метода, потому что вы никогда его не вызываете).
Manager
класса из IMOEmployee
был первой серьезной ошибкой.