Рефакторинг

kuba1981

Новичок
Здравствуйте, с недавнего времени начал практиковать тестирование кода, хотел узнать как проводят рефакторинг кода, например есть у меня модуль покрытый тестами, через какое то время я рефакторю его, получается тесты нужно переписывать? Читал книги по рефакторингу "Рефакторинг" Мартин Фаулер там написано что весь процесс рефакторинга происходит через написанные тесты, но сами тесты не должны меняться т. к мы не меняем логику приложения, а только улучшаем качество кода, но если например я применяю "выделение метода" или "выделение класса" или наоборот "сворачивание класса" у меня падают тесты, приходится их подпиливать или это нормальная практика допиливания тестов после рефакторинга кода, как то не очень удобно нужно открывать и вникать в тесты.
 

jonjonson

Охренеть
При рефакторинге функционал не меняется. Улучшается только качество кода.
 

Вурдалак

Продвинутый новичок
Здравствуйте, с недавнего времени начал практиковать тестирование кода, хотел узнать как проводят рефакторинг кода, например есть у меня модуль покрытый тестами, через какое то время я рефакторю его, получается тесты нужно переписывать? Читал книги по рефакторингу "Рефакторинг" Мартин Фаулер там написано что весь процесс рефакторинга происходит через написанные тесты, но сами тесты не должны меняться т. к мы не меняем логику приложения, а только улучшаем качество кода, но если например я применяю "выделение метода" или "выделение класса" или наоборот "сворачивание класса" у меня падают тесты, приходится их подпиливать или это нормальная практика допиливания тестов после рефакторинга кода, как то не очень удобно нужно открывать и вникать в тесты.
Тут путаница из-за масштабов рефакторинга. Когда ты, например, переносишь метод в другой класс, то ты делаешь рефакторинг всей системы, где оба класса используются. И для тестов самой системы ничего не должно меняться. Но для тестов отдельно взятых классов что-то должно поменяться, конечно, потому что изменился их API. Строго говоря, в отношении самих классов ты делаешь не рефакторинг, а, скажем, перемоделирование. Но на практике это всё называют рефакторингом.

В строгом смысле рефакторингом класса можно называть такое его изменение, при котором не поменялся ни его публичный интерфейс, ни его поведение.
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Если при рефакторинге у тебя падают тесты - значит, совсем плохо с архитектурой, и нет понимания.
При выделении метода существующие методы не меняются.
Выделение класса - это вообще что значит? Был один большой класс, ты перенес половину методов в другой, и потом поменял имена класса при генерации объекта, а затем и переменные объектов при вызовах? Это не просто рефакторинг, а переписывание говнокода. Рефакторинг подразумевал бы создание фасада для сохранения API.
 

AnrDaemon

Продвинутый новичок
И опять же какие тесты имеются в виду? Если ты поменял отношение классов, юнит-тесты, естественно, придётся переписать. А вот интеграционные, особенно на верхних уровнях, пострадать не должны.
 
Сверху